Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/lkremer/ggpointdensity
:chart_with_upwards_trend: :bar_chart: Introduces geom_pointdensity(): A Cross Between a Scatter Plot and a 2D Density Plot.
https://github.com/lkremer/ggpointdensity
2d-density-plot density-visualization geom ggplot-extension ggplot2 ggplot2-enhancements ggplot2-geoms neighboring-points r r-package r-stats rstats scatter-plot visualization
Last synced: 1 day ago
JSON representation
:chart_with_upwards_trend: :bar_chart: Introduces geom_pointdensity(): A Cross Between a Scatter Plot and a 2D Density Plot.
- Host: GitHub
- URL: https://github.com/lkremer/ggpointdensity
- Owner: LKremer
- License: gpl-3.0
- Created: 2019-07-04T13:22:15.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2024-05-16T11:22:20.000Z (8 months ago)
- Last Synced: 2024-09-30T21:08:45.302Z (3 months ago)
- Topics: 2d-density-plot, density-visualization, geom, ggplot-extension, ggplot2, ggplot2-enhancements, ggplot2-geoms, neighboring-points, r, r-package, r-stats, rstats, scatter-plot, visualization
- Language: R
- Homepage:
- Size: 3.63 MB
- Stars: 409
- Watchers: 6
- Forks: 24
- Open Issues: 8
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# ggpointdensity
[![CRAN\_Status\_Badge](https://www.r-pkg.org/badges/version/ggpointdensity)](https://cran.r-project.org/package=ggpointdensity)
[![Downloads](https://cranlogs.r-pkg.org/badges/last-month/ggpointdensity?color=brightgreen)](https://cran.r-project.org/package=ggpointdensity)Introduces `geom_pointdensity()`: A cross between a scatter plot and a 2D density plot.
## Installation
To install the package, type this command in R:
``` r
install.packages("ggpointdensity")# Alternatively, you can install the latest
# development version from GitHub:
if (!requireNamespace("devtools", quietly = TRUE))
install.packages("devtools")
devtools::install_github("LKremer/ggpointdensity")
```## Motivation
There are several ways to visualize data points on a 2D coordinate system:
If you have lots of data points on top of each other, `geom_point()` fails to
give you an estimate of how many points are overlapping.
`geom_density2d()` and `geom_bin2d()` solve this issue, but they make it impossible
to investigate individual outlier points, which may be of interest.`geom_pointdensity()` aims to solve this problem by combining the best of both
worlds: individual points are colored by the number of neighboring points.
This allows you to see the overall distribution, as well as individual points.## Changelog
Added `method` argument and renamed the `n_neighbor` stat to `density`. The available options
are `method="auto"`,
`method="default"` and `method="kde2d"`. `default` is the regular n_neighbor calculation
as in the CRAN package. `kde2d` uses 2D kernel density estimation to estimate the point density
(credits to @slowkow).
This method is slower for few points, but faster for many (ca. >20k) points. By default,
`method="auto"` picks either `kde2d` or `default` depending on the number of points.## Demo
Generate some toy data and visualize it with `geom_pointdensity()`:
``` r
library(ggplot2)
library(dplyr)
library(viridis)
library(ggpointdensity)dat <- bind_rows(
tibble(x = rnorm(7000, sd = 1),
y = rnorm(7000, sd = 10),
group = "foo"),
tibble(x = rnorm(3000, mean = 1, sd = .5),
y = rnorm(3000, mean = 7, sd = 5),
group = "bar"))ggplot(data = dat, mapping = aes(x = x, y = y)) +
geom_pointdensity() +
scale_color_viridis()
```Each point is colored according to the number of neighboring points.
(Note: this here is the dev branch, where I decided to plot the density estimate
instead of n_neighbors now.)
The distance threshold to consider two points as neighbors (smoothing
bandwidth) can be adjusted with the `adjust` argument, where `adjust = 0.5`
means use half of the default bandwidth.
``` r
ggplot(data = dat, mapping = aes(x = x, y = y)) +
geom_pointdensity(adjust = .1) +
scale_color_viridis()
ggplot(data = dat, mapping = aes(x = x, y = y)) +
geom_pointdensity(adjust = 4) +
scale_color_viridis()
```Of course you can combine the geom with standard `ggplot2` features
such as facets...``` r
# Facetting by group
ggplot(data = dat, mapping = aes(x = x, y = y)) +
geom_pointdensity() +
scale_color_viridis() +
facet_wrap( ~ group)
```... or point shape and size:
``` r
dat_subset <- sample_frac(dat, .1) # smaller data set
ggplot(data = dat_subset, mapping = aes(x = x, y = y)) +
geom_pointdensity(size = 3, shape = 17) +
scale_color_viridis()
```Zooming into the axis works as well, keep in mind that `xlim()` and
`ylim()` change the density since they remove data points.
It may be better to use `coord_cartesian()` instead.``` r
ggplot(data = dat, mapping = aes(x = x, y = y)) +
geom_pointdensity() +
scale_color_viridis() +
xlim(c(-1, 3)) + ylim(c(-5, 15))ggplot(data = dat, mapping = aes(x = x, y = y)) +
geom_pointdensity() +
scale_color_viridis() +
coord_cartesian(xlim = c(-1, 3), ylim = c(-5, 15))
```## Authors
Lukas PM Kremer ([@LPMKremer](https://twitter.com/LPMKremer/)) and Simon Anders ([@s_anders_m](https://twitter.com/s_anders_m/)), 2019