当对数据进行子集操作时,如何将geom_repel_text与geom_jitter点对齐?

3

我正在制作箱线图和抖动图来展示每个数据点。然后我在每个点上放置文本标签。这个方法很好用,但是一旦我尝试对我想要标记的点进行子集操作,文本就无法对齐了。

以下是我的代码(参考了这个页面的一些帮助):

library(ggplot2)
ggplot(mtcars, aes(vs, wt, group = am, label = wt)) +
  geom_boxplot(outlier.shape = NA) +
  geom_jitter(position = position_jitter(seed = 1)) +
  geom_text_repel(data = subset(mtcars, wt > 3),
                  position = position_jitter(seed = 1))

这是我的图表。正如您所见,标签与点不对齐。 boxplot with jitter and subsetted labels 有什么想法为什么这样不起作用?
2个回答

3
问题在于,如果你使用子集来进行筛选,ggrepel只会看到你数据的这一部分,并假定你只是在绘制子集。如果你想让ggrepel考虑到所有的数据,请使用ifelse条件来选择要标记的点,而不是使用子集:
library(ggplot2)
library(ggrepel)
ggplot(mtcars, aes(vs, wt, group = am, label = wt)) +
  geom_boxplot(outlier.shape = NA) +
  geom_jitter(position = position_jitter(seed = 1)) +
  geom_text_repel(aes(label = ifelse(wt > 3, wt, "")), position = position_jitter(seed = 1))


2

另一种方法是使用自定义的 alpha 值,使您不想显示的权重变为透明:

library(ggplot2)

ggplot(within(mtcars, visible <- wt > 3),
       aes(vs, wt, group = am, label = wt)) +
  geom_boxplot(outlier.shape = NA) +
  geom_jitter(position = position_jitter(seed = 1)) +
  geom_text_repel(position = position_jitter(seed = 1),
                  aes(alpha = visible)) +
  scale_alpha_manual(values = c(0, 1)) +
  guides(alpha = guide_none())

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接