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() в обеих панелях по желанию:

Другие вопросы по тегам