添加 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))
昨天发了个问题,在标签上找一个特殊的抖动图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))