ggforce facet_zoom - метки только на увеличенном примере
Я хотел бы отметить точки на диаграмме рассеяния, но только те, которые находятся внутри facet_zoom
панель. Вот пример:
library(ggplot2)
library(ggforce)
library(ggrepel)
library(magrittr)
labels <- letters
example_values_x <- rnorm(26)
example_values_y <- rnorm(26)
df <- data.frame(labels,
example_values_x,
example_values_y)
df %>% ggplot(aes(y = example_values_y,
x = example_values_x)) +
geom_point() +
facet_zoom(x = example_values_x > 0.5) +
geom_label_repel(data = filter(df, example_values_x > 0.5), aes(label = labels))
Есть идеи, как сделать так, чтобы ярлыки не появлялись на панели без увеличения?
1 ответ
ПРИМЕЧАНИЕ. Следующий ответ работает с версией gitforum для GitHub. На момент написания этой статьи версия на CRAN, похоже, имела другой интерфейс для facet_zoom()
хотя версия пакета та же самая.
Сначала возьмите свое подмножество данных, помеченных и добавьте zoom
столбец, указывающий, должны ли данные отображаться на увеличенной панели (TRUE
), оригинальная панель (FALSE
), или оба (NA
):
dftxt <- dplyr::filter(df, example_values_x > 0.5) %>%
dplyr::mutate( zoom = TRUE ) ## All entries to appear in the zoom panel only
Теперь вы можете передать этот новый фрейм данных geom_label_repel
, рассказывая facet_zoom()
использовать zoom
столбец, чтобы определить, где данные должны быть нарисованы:
df %>% ggplot(aes(y = example_values_y,
x = example_values_x)) +
geom_point() +
facet_zoom(x = example_values_x > 0.5, zoom.data=zoom) + # Note the zoom.data argument
geom_label_repel(data = dftxt, aes(label = labels))
Обратите внимание, что, поскольку оригинал df
не имеет zoom
колонка, facet_zoom()
будет относиться к этому как NA
и рисовать geom_point()
в обеих панелях по желанию: