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() })
)
# filter (and here highlight) 1/10 observations in sparsest regions
ggplot(data = d, aes(x, y)) +
geom_point() +
stat_dens2d_filter(colour = "red")
# filter observations not in the sparsest regions
ggplot(data = d, aes(x, y)) +
geom_point() +
stat_dens2d_filter(colour = "blue", invert.selection = TRUE)
# filter observations in dense regions of the plot
ggplot(data = d, aes(x, y)) +
geom_point() +
stat_dens2d_filter(colour = "blue", keep.sparse = FALSE)
# filter 1/2 the observations
ggplot(data = d, aes(x, y)) +
geom_point() +
stat_dens2d_filter(colour = "red", keep.fraction = 0.5)
# filter 1/2 the observations but cap their number to maximum 12 observations
ggplot(data = d, aes(x, y)) +
geom_point() +
stat_dens2d_filter(colour = "red",
keep.fraction = 0.5,
keep.number = 12)
# density filtering done jointly across groups
ggplot(data = d, aes(x, y, colour = group)) +
geom_point() +
stat_dens2d_filter(shape = 1, size = 3, keep.fraction = 1/4)
# density filtering done independently for each group
ggplot(data = d, aes(x, y, colour = group)) +
geom_point() +
stat_dens2d_filter_g(shape = 1, size = 3, keep.fraction = 1/4)
# density filtering done jointly across groups by overriding grouping
ggplot(data = d, aes(x, y, colour = group)) +
geom_point() +
stat_dens2d_filter_g(colour = "black",
shape = 1, size = 3, keep.fraction = 1/4)
# label observations
ggplot(data = d, aes(x, y, label = lab, colour = group)) +
geom_point() +
stat_dens2d_filter(geom = "text")
ggplot(data = d, aes(x, y, label = lab, colour = group)) +
geom_point() +
stat_dens2d_filter(geom = "text",
keep.these = function(x) {grepl("^u", x)})
ggplot(data = d, aes(x, y, label = lab, colour = group)) +
geom_point() +
stat_dens2d_filter(geom = "text",
keep.these = function(x) {grepl("^u", x)})
ggplot(data = d, aes(x, y, label = lab, colour = group)) +
geom_point() +
stat_dens2d_filter(geom = "text",
keep.these = 1:30)
# looking under the hood with gginnards::geom_debug()
gginnards.installed <- requireNamespace("gginnards", quietly = TRUE)
if (gginnards.installed) {
library(gginnards)
ggplot(data = d, aes(x, y, label = lab, colour = group)) +
stat_dens2d_filter(geom = "debug")
ggplot(data = d, aes(x, y, label = lab, colour = group)) +
geom_point() +
stat_dens2d_filter(geom = "debug", return.density = TRUE)
}
Run the code above in your browser using DataLab