ggforce facet_zoom - 仅在缩放示例上标记

时间:2017-07-20 17:46:09

标签: r ggplot2 ggforce

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

答案 0 :(得分:2)

注意:以下答案适用于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()面板,根据需要:

enter image description here