stat_dens2d_labels()
Sets values mapped to the
label
aesthetic to ""
or a user provided character string
based on the local density in regions of a plot panel. Its main use is
together with repulsive geoms from package ggrepel
.
If there is no mapping to label
in data
, the mapping is set
to rownames(data)
, with a message.
stat_dens2d_labels(
mapping = NULL,
data = NULL,
geom = "text",
position = "identity",
...,
keep.fraction = 0.1,
keep.number = Inf,
keep.sparse = TRUE,
invert.selection = FALSE,
h = NULL,
n = NULL,
label.fill = "",
na.rm = TRUE,
show.legend = FALSE,
inherit.aes = TRUE
)
A layer specific dataset - only needed if you want to override the plot defaults.
The geometric object to use display the data.
The position adjustment to use for overlapping points on this layer
numeric [0..1]. The fraction of the observations (or
rows) in data
to be retained.
integer Set the maximum number of observations to retain,
effective only if obeying keep.fraction
would result in a larger
number.
logical If TRUE
, the default, observations from the
more sparse regions are retained, if FALSE
those from the densest
regions.
logical If TRUE
, the complement of the
selected rows are returned.
vector of bandwidths for x and y directions. Defaults to normal reference bandwidth (see bandwidth.nrd). A scalar value will be taken to apply to both directions.
Number of grid points in each direction. Can be scalar or a length-2 integer vector
character vector of length 1 or a function.
a logical value indicating whether NA values should be stripped before the computation proceeds.
logical. Should this layer be included in the legends?
NA
, the default, includes if any aesthetics are mapped. FALSE
never includes, and TRUE
always includes.
If FALSE
, overrides the default aesthetics, rather
than combining with them. This is most useful for helper functions that
define both data and aesthetics and shouldn't inherit behaviour from the
default plot specification, e.g. borders
.
A plot layer instance. Using as output data
the input
data
after value substitution based on a 2D the filtering criterion.
stat_dens2d_labels()
is designed to work together with
statistics from package 'ggrepel'. To avoid text labels being plotted over
unlabelled points the corresponding rows in data need to be retained but
labels replaced with the empty character string, ""
. This makes
stat_dens2d_filter
unsuitable for the task. Non-the-less
stat_dens2d_labels()
could be useful in some other cases, as the
substitution character string can be set by the user.
kde2d
used internally.
Other statistics returning a subset of data:
stat_dens1d_filter()
,
stat_dens1d_labels()
,
stat_dens2d_filter()
# NOT RUN {
random_string <-
function(len = 6) {
paste(sample(letters, len, replace = TRUE), collapse = "")
}
# Make random data.
set.seed(1001)
d <- tibble::tibble(
x = rnorm(100),
y = rnorm(100),
group = rep(c("A", "B"), c(50, 50)),
lab = replicate(100, { random_string() })
)
# using defaults
ggplot(data = d, aes(x, y, label = lab)) +
geom_point() +
stat_dens2d_labels()
ggplot(data = d, aes(x, y, label = lab)) +
geom_point() +
stat_dens2d_labels(geom = "text_linked",
position = position_nudge_center(x = 0.1, y = 0.1,
center_x = mean,
center_y = mean),
vjust = "outward_mean", hjust = "outward_mean") +
expand_limits(x = c(-4, 4.5))
ggrepel.installed <- requireNamespace("ggrepel", quietly = TRUE)
if (ggrepel.installed) {
library(ggrepel)
ggplot(data = d, aes(x, y, label = lab, colour = group)) +
geom_point() +
stat_dens2d_labels(geom = "text_repel")
ggplot(data = d, aes(x, y, label = lab, colour = group)) +
geom_point() +
stat_dens2d_labels(geom = "text_repel", label.fill = NA)
# we keep labels starting with "a" across the whole plot, but all in sparse
# regions. To achieve this we pass as argument to label.fill a fucntion
# instead of a character string.
label.fun <- function(x) {ifelse(grepl("^a", x), x, "")}
ggplot(data = d, aes(x, y, label = lab, colour = group)) +
geom_point() +
stat_dens2d_labels(geom = "text_repel", label.fill = label.fun)
}
# Using geom_debug() we can see that all 100 rows in \code{d} are
# returned. But only those labelled in the previous example still contain
# the original labels.
gginnards.installed <- requireNamespace("gginnards", quietly = TRUE)
if (gginnards.installed) {
library(gginnards)
ggplot(data = d, aes(x, y, label = lab)) +
geom_point() +
stat_dens2d_labels(geom = "debug")
}
# }
Run the code above in your browser using DataLab