stat_pointdensity {ggpointdensity} | R Documentation |
A cross between a scatter plot and a 2D density plot
Description
geom_pointdensity()
visualizes overlapping data points on a 2D
coordinate system. It combines the benefits of
geom_point()
,
geom_density2d()
, and
geom_bin2d()
by coloring individual points based
on the density of neighboring points. This approach highlights the overall
data distribution while preserving the visibility of individual outliers,
making it ideal for data exploration.
Usage
stat_pointdensity(
mapping = NULL,
data = NULL,
geom = "point",
position = "identity",
...,
adjust = 1,
na.rm = FALSE,
method = c("auto", "kde2d", "neighbors"),
method.args = list(),
show.legend = NA,
inherit.aes = TRUE
)
Arguments
mapping |
Set of aesthetic mappings created by |
data |
The data to be displayed in this layer. There are three options: If A A |
geom |
The geometric object to use to display the data for this layer, defaults to "point". |
position |
A position adjustment to use on the data for this layer. This
can be used in various ways, including to prevent overplotting and
improving the display. The
|
... |
Other arguments passed on to
|
adjust |
Multiplicative bandwidth adjustment for density estimation. A
value less than 1 (e.g., |
na.rm |
If |
method |
Density estimation method. Options are
|
method.args |
List of additional arguments passed on to the density
estimation function defined by |
show.legend |
logical. Should this layer be included in the legends?
|
inherit.aes |
If |
Aesthetics
geom_point()
understands the following aesthetics (required aesthetics are in bold):
Learn more about setting these aesthetics in vignette("ggplot2-specs")
.
Author(s)
Lukas PM Kremer & Simon Anders
See Also
You can find examples and demo plots at https://github.com/LKremer/ggpointdensity
Examples
library(ggpointdensity)
library(ggplot2)
library(dplyr)
# generate some toy data
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"))
# plot it with geom_pointdensity()
ggplot(data = dat, mapping = aes(x = x, y = y)) +
geom_pointdensity()
# adjust the smoothing bandwidth,
# i.e. the radius around the points
# in which neighbors are counted
ggplot(data = dat, mapping = aes(x = x, y = y)) +
geom_pointdensity(adjust = .1)
ggplot(data = dat, mapping = aes(x = x, y = y)) +
geom_pointdensity(adjust = 4)
ggplot(data = dat, mapping = aes(x = x, y = y)) +
geom_pointdensity(adjust = 4) +
scale_colour_continuous(low = "red", high = "black")
# I recommend the viridis package
# for a more useful color scale
library(viridis)
ggplot(data = dat, mapping = aes(x = x, y = y)) +
geom_pointdensity() +
scale_color_viridis()
# Of course you can combine the geom with standard
# ggplot2 features such as facets...
ggplot(data = dat, mapping = aes(x = x, y = y)) +
geom_pointdensity() +
scale_color_viridis() +
facet_wrap(~ group)
# ... or point shape and size:
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() affect the density since they
# remove data points.
# It may be better to use coord_cartesian() instead.
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))