繁体   English   中英

Plot 箱线图随时间使用多个类别

[英]Plot boxplots over time using multiple categories

我很抱歉 header 我不太确定如何询问它。 我有一个看起来像这样的数据框。

Sample=c("A","A", "A", "B","B","B","A","A", "A", "B","B","B","A","A", "A", "B","B","B","A","A", "A", "B","B","B")
Treatment=c("twiter","twiter","twiter","twiter","twiter","twiter","facebook","facebook","facebook","facebook","facebook","facebook",
            "twiter","twiter","twiter","twiter","twiter","twiter","facebook","facebook","facebook","facebook","facebook","facebook")
replicate=c(1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3)
time=c( 10,10,10,10,10,10,10,10,10,10,10,10,20,20,20,20,20,20,20,20,20,20,20,20)
points=c(20,40,80,20,60,120, 30,100,55, 28, 45,90, 80,20,100, 40,90,56,20,30,12,3,5,8)
length(points)

   Sample Treatment replicate time points
1       A    twiter         1   10     20
2       A    twiter         2   10     40
3       A    twiter         3   10     80
4       B    twiter         1   10     20
5       B    twiter         2   10     60
6       B    twiter         3   10    120
7       A  facebook         1   10     30
8       A  facebook         2   10    100
9       A  facebook         3   10     55
10      B  facebook         1   10     28
11      B  facebook         2   10     45
12      B  facebook         3   10     90
13      A    twiter         1   20     80
14      A    twiter         2   20     20
15      A    twiter         3   20    100
16      B    twiter         1   20     40
17      B    twiter         2   20     90
18      B    twiter         3   20     56
19      A  facebook         1   20     20
20      A  facebook         2   20     30
21      A  facebook         3   20     12
22      B  facebook         1   20      3
23      B  facebook         2   20      5
24      B  facebook         3   20      8

我想在每个时间点使用箱线图 plot 我的数据。 我想要一个盒子 plot,它在时间点 10 显示带有“twiter”的样品 A 带有“facebook”的样品 A 带有“twiter”的样品“B”和带有“facebook”的样品 B 在时间点 10 和时间点 20 相同。

到目前为止,我可以做这样的事情。 在此处输入图像描述

ggplot(data,aes(x=time, y=points,color=Sample, fill=Sample, group=interaction(Sample,Treatment)), alpha=0.1) +
  geom_boxplot(alpha=0.1) +
  geom_point(position = position_dodge(width=0.75), alpha=0.2)+
  theme_bw() 

但这是错误的,我想让两个不同处理的样本 A 和 B 在每个时间点彼此相邻,以查看差异。 我不想使用 facet_wrap。 这对我来说是一个挑战。 感谢您的时间

尝试这个:

library(dplyr)
library(ggplot2)
#Plot
data %>%
  arrange(Sample) %>%
  mutate(Var=paste(Sample,Treatment),
         Var=factor(Var,levels = unique(Var),ordered = T)) %>%
  ggplot(aes(x=time,
             y=points,
             color=Var, fill=Var,
             group=Var), alpha=0.1) +
  geom_boxplot(alpha=0.1)+
  geom_point(position = position_dodge(width=0.75), alpha=0.2)+
  theme_bw()+
  scale_color_manual(values=c('tomato','tomato','cyan3','cyan3'))+
  scale_fill_manual(values=c('tomato','tomato','cyan3','cyan3'))

Output:

在此处输入图像描述

如果您不介意将时间作为一个因素,您可以执行以下操作。 请注意,我将您的数据转换为名为“dat”的数据框。

dat <- data.frame(Sample=c("A","A", "A", "B","B","B","A","A", "A", "B","B","B","A","A", "A", "B","B","B","A","A", "A", "B","B","B"),
Treatment=c("twiter","twiter","twiter","twiter","twiter","twiter","facebook","facebook","facebook","facebook","facebook","facebook",
            "twiter","twiter","twiter","twiter","twiter","twiter","facebook","facebook","facebook","facebook","facebook","facebook"),
replicate=c(1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3),
time=c( 10,10,10,10,10,10,10,10,10,10,10,10,20,20,20,20,20,20,20,20,20,20,20,20),
points=c(20,40,80,20,60,120, 30,100,55, 28, 45,90, 80,20,100, 40,90,56,20,30,12,3,5,8))

dat %>%
  mutate(time = factor(time)) %>%
  ggplot(aes(x=time, y=points, color=Sample, fill=Sample), alpha=0.1) +
  geom_boxplot(alpha=0.1) +
  geom_point(position = position_dodge(width=0.75), alpha=0.2)+
  theme_bw() 

箱线图按时间

将我的评论变成答案:您的问题是group=interaction(Sample,Treatment)覆盖了通常会按 x 轴(时间)进行的分组。 要将time包含在分组中,请将其添加到interaction中:

ggplot(data,
       aes(
         x = time,
         y = points,
         color = Sample,
         fill = Sample,
         group = interaction(Sample, Treatment, time)
       ),
       alpha = 0.1) +
  geom_boxplot(alpha = 0.1) +
  geom_point(position = position_dodge(width = 0.75), alpha = 0.2) +
  theme_bw()

在此处输入图像描述

当然,问题仍然是没有办法知道哪个盒子适合哪种治疗,但我会留给你解决。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM