ggforce facet_zoom - 仅在缩放示例中添加标签

ggforce facet_zoom - labels only on zoomed example

我想在散点图中标记点,但只标记 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))

知道如何使标签不会同时出现在非缩放面板上吗?

注意:以下答案适用于 GitHub version of ggforce。在撰写本文时,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()面板,根据需要: