gpt4 book ai didi

r - ggplot2:如何微调 geom_beeswarm 中点的位置?

转载 作者:行者123 更新时间:2023-12-05 03:02:37 25 4
gpt4 key购买 nike

我正在准备一个箱线图,它应该同时显示箱线图和数据点。数据点应在右侧微移,而箱线图应在左侧。

我使用 R-Package ggbeeswarm 的 geom_beeswarm 函数来避免重叠点,类似于 geom_jitter。

但是,因为我想在左侧添加一个箱线图,所以我想将数据点水平移动到右侧,以便左侧有空间用于箱线图。

我已经试过 position = position_nudge(x = 0.5) 但参数对于 geom_beeswarm 是未知的。 nudge_x=0.5 也是如此。

有人有其他解决方案可以将 geom_beeswarm 图向右移动吗?

可重现的例子

df <- data.frame('variable'=rep(c('control','treatment'),each=20),
'value'=c(runif(20, min=0, max=3), rnorm(60)))

ggtest<-ggplot(df,aes(variable, value)) +
geom_beeswarm(priority='random',cex=2.5)
ggtest

最佳答案

试试这个。基本上首先创建一个新变量,它是你的“variable”的副本,只需使用paste0添加一个数字以避免混淆,我将其命名为“variable2”

打印新的 df 以查看差异。这个新的 variable2 将用作 geom_beeswarm()aes(),然后只需使用 scale_x_discrete 和尝试使用 theme() 将文本置于 x 轴 的中心。

我再次建议在调用 scale_x_discrete() ecc.. 之前打印绘图以了解我的意思。

df$variable2 <- paste0(df$variable, "2") # create a second almost identical variable

ggplot(df,aes(variable, value)) +
geom_beeswarm(aes(variable2),priority='random',cex=2.5) + # use variable2 as custom aes() for the bees
geom_boxplot() +
# play with this to customize labels, we just want to hide "control2" and "treatment2"
scale_x_discrete(breaks = c("control", "treatment")) +
# with this we center the text and remove the tick marks to improve the plot
theme(axis.text.x = element_text(hjust=-1),
axis.ticks.x = element_blank(),
panel.grid.major.x = element_blank()) # removes vertical grid white lines

enter image description here

数据示例:

library(ggbeeswarm)

df <- data.frame('variable'=rep(c('control','treatment'),each=20),
'value'=c(runif(20, min=0, max=3), rnorm(60)))

更新 以响应更多间距的 OP 请求。

我找不到更好的方法来增加 geoms 之间的间距。我使用了创建两个虚拟新变量的技巧,它们将用于在 beeswarm 旁边绘制第三个 geom

这将强制 ggplot 留出一些间距,并且通过设置与 相同的 color 来隐藏新的 geom 面板的bg

我使用了 geom_boxplot()

新示例数据:

df <- data.frame('variable'=rep(letters[1:7],each=20),
'value'=c(runif(40, min=0, max=3), rnorm(100)))
df$variable2 <- paste0(df$variable, "2") # create a second almost identical variable

创建两个新变量,我们可以使用它们来绘制第三个对象,该对象将使用与 bg 相同的color 进行屏蔽。

df$variable3 <- paste0(df$variable, "3")
df$value3 <- c(runif(40, min=0, max=3), rnorm(100))

最后:

ggplot(df,aes(variable, value)) +
geom_beeswarm(aes(variable2),priority='random',cex=2.5) +
geom_boxplot() +
geom_boxplot(aes(variable3, value3), color="white") + # this is the boxplot that we will hide (notice the color choice)
scale_x_discrete(breaks = c(letters[1:7])) +
theme(axis.text.x = element_text(hjust=-6), # adjust to center the x-labels
axis.ticks.x = element_blank(),
panel.background = element_rect(color="white", fill="white"),
panel.grid.major.x = element_blank(),
panel.grid.major = element_blank(), # to remove grid lines
panel.grid.minor = element_blank(),
axis.line = element_line(size = 0.5, linetype = "solid",
colour = "black"))

enter image description here

同样可以进一步调整。

关于r - ggplot2:如何微调 geom_beeswarm 中点的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54672468/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com