View source: R/geom_pointdensity.R
stat_pointdensity | R Documentation |
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.
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
)
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 |
geom_point()
understands the following aesthetics (required aesthetics are in bold):
x
y
alpha
colour
fill
group
shape
size
stroke
Learn more about setting these aesthetics in vignette("ggplot2-specs")
.
Lukas PM Kremer & Simon Anders
You can find examples and demo plots at https://github.com/LKremer/ggpointdensity
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))
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.