如何在r中的箱线图之间创建单独的线图

埃里希

我正在尝试创建一个如下图所示的图,其中各个数据线位于箱线图之间。在 R ggplot2 中创建的图像

我得到的最接近的是这样的:使用 ggplot2 的图像,但后面的线条/点看起来有点混乱。

data1 %>%
ggplot(aes(Time,Trait)) +
geom_line(aes(group=ID), position = "identity")+
geom_point(aes(group=ID), shape=21, colour="black", size=2, position = "identity")+
geom_boxplot(width=.5,position = position_dodge(width=0.9), fill="white") +
stat_summary(fun.data= mean_cl_boot, geom = "errorbar", width = 0.1,  position = position_dodge(width = .9)) +
stat_summary(fun = mean, geom = "point", shape = 18, size=3, position = "identity")+
facet_wrap(~Cond) +
theme_classic()

任何提示将非常感谢!

斯蒂芬

实现您想要的结果的一种选择是使用连续的 x 比例。这样做可以将点和线的箱线图向左或向右移动,反之亦然:

利用一些随机数据来模拟您的真实数据集。


data1$Time1 <- as.numeric(factor(data1$Time, levels = c("Pre", "Post")))
data1$Time_box <- data1$Time1 + .1 * ifelse(data1$Time == "Pre", -1, 1)
data1$Time_lp <- data1$Time1 + .1 * ifelse(data1$Time == "Pre", 1, -1)

library(ggplot2)
ggplot(data1, aes(x = Time_box, y = Trait)) +
  geom_line(aes(x = Time_lp, group=ID), position = "identity")+
  geom_point(aes(x = Time_lp, group=ID), shape=21, colour="black", size=2, position = "identity")+
  geom_boxplot(aes(x = Time_box, group=Time1), width=.25, fill="white") +
  stat_summary(fun.data = mean_cl_boot, geom = "errorbar", width = 0.1) +
  stat_summary(fun = mean, geom = "point", shape = 18, size=3, position = "identity") +
  scale_x_continuous(breaks = c(1, 2), labels = c("Pre", "Post")) +
  facet_wrap(~Cond) +
  theme_classic()

数据

set.seed(42)

data1 <- data.frame(
  ID = rep(1:10, 4),
  Time = rep(c("Pre", "Post"), each = 10),
  Trait = runif(40),
  Cond = rep(c("MBSR", "SME"), each = 20)
)

编辑如果你想并排放置两个箱线图,它基本上是一样的。但是,在这种情况下,您必须映射interactionofTime1和映射fillgroup美学上的变量geom_boxplot(可能还有误差线):

library(ggplot2)

set.seed(42)

data1 <- data.frame(
  ID = rep(1:10, 4),
  Time = rep(c("Pre", "Post"), each = 10),
  Fill = rep(c("Fill1", "Fill2"), each = 5),
  Trait = runif(40),
  Cond = rep(c("MBSR", "SME"), each = 20)
)

ggplot(data1, aes(x = Time_box, y = Trait)) +
  geom_line(aes(x = Time_lp, group=ID, color = Fill), position = "identity")+
  geom_point(aes(x = Time_lp, group=ID, fill = Fill), shape=21, colour="black", size=2, position = "identity")+
  geom_boxplot(aes(x = Time_box, group=interaction(Time1, Fill) , fill = Fill), width=.25) +
  stat_summary(fun.data = mean_cl_boot, geom = "errorbar", width = 0.1) +
  stat_summary(fun = mean, geom = "point", shape = 18, size=3, position = "identity") +
  scale_x_continuous(breaks = c(1, 2), labels = c("Pre", "Post")) +
  facet_wrap(~Cond) +
  theme_classic()

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章