添加 nudge_y 到 "Jittered" R ggplot2 图的数据标签 - 分类值

Adding a nudge_y to the data labels of a "Jittered" R ggplot2 graph - Categorical values

昨天发了个问题,在标签上找一个特殊的抖动图anudge_y,以便移动到图的上部

我们能够解决我的问题,向原始数据帧添加抖动。

现在我面临类似的情况,但 y 变量不是定性的连续变量,而是分类变量。为了简单起见,我从 iris 数据库中获取数据。

library(ggrepel)
library(ggplot2)
library(tidyverse)
attach(iris)

pos <- position_jitter(seed = 1, height = 0.25)

ggplot(iris, aes(x=Sepal.Length, y=Species, label = Sepal.Width), max.overlaps = Inf) +
  geom_jitter(position = pos) +
  geom_text_repel(aes(label = ifelse(Sepal.Width > 3, Sepal.Width, "")), position = pos)

获取此图

我现在想在 geom_text_repel 上定义一个 nudge_y 以便仅沿 y 方向移动标签(或者不使用 nudge_y 但有一个不同的技巧我不知道)。使用这种变量,我无法在数据帧上添加抖动,因为 Species 是分类变量。

使用 aes(y = Sepal.Width + 0.5, label = ifelse(Sepal.Width > 3, Sepal.Width, "")) 会抖动标签,但它们会错过与点的连接:

有什么办法吗?

分类变量的工作原理几乎相同,您只需将因子转换为数值变量,然后再添加标签:

library(ggrepel)
library(ggplot2)
library(tidyverse)


iris %>% 
  mutate(jit_species = as.numeric(Species) + runif(n(), -0.25, 0.25)) %>% 
  ggplot(aes(x = Sepal.Length, y = jit_species, label = Sepal.Width)) +
  geom_point() +
  geom_text_repel(aes(label = ifelse(Sepal.Width > 3, Sepal.Width, "")),
                  max.overlaps = Inf,
                  nudge_y = .25) +
  scale_y_continuous(breaks = 1:3, 
                     label = levels(iris$Species))