ggplot2-按顺序绘制多个data.frames

ggplot2-按顺序绘制多个data.frames,r,data-visualization,ggplot2,boxplot,R,Data Visualization,Ggplot2,Boxplot,我很抱歉,如果这是更多的,而不是简历 我试图将第二个箱线图包含到现有箱线图中,该箱线图按照绘制的值的平均值排序。当我包含第二个data.frame中的箱线图(表示其他图的控制样本)时,原始图将失去其顺序 以下是一个例子: x1 <- data.frame("V1" = runif(100, 0, 100), "siteno" = "X1") #mean = 50.3 x2 <- data.frame("V1" = runif(100, 200, 450), "siteno" = "X

我很抱歉,如果这是更多的,而不是简历

我试图将第二个箱线图包含到现有箱线图中,该箱线图按照绘制的值的平均值排序。当我包含第二个data.frame中的箱线图(表示其他图的控制样本)时,原始图将失去其顺序

以下是一个例子:

x1 <- data.frame("V1" = runif(100, 0, 100), "siteno" = "X1") #mean = 50.3
x2 <- data.frame("V1" = runif(100, 200, 450), "siteno" = "X2") #mean = 322.4
x3 <- data.frame("V1" = runif(100, 50, 150), "siteno" = "X3") #mean = 97.8
xData <- rbind(x1,x2,x3)
xData$siteno <- with(xData, reorder(siteno, V1, mean))

zData <- data.frame("V1" = runif(300, 0, 450), "siteno" = "Z1") #mean = 224.2

#orders xData correctly 
ggplot(xData, aes(x = siteno , y = V1)) +
stat_summary(fun.y=mean, colour="red", geom="point") +
geom_boxplot (aes(fill=siteno), alpha=.5, width=1, position = position_dodge(width = 1),  outlier.colour = "dark gray", outlier.size = 1)

x1当使用两个数据帧在一个绘图中合并数据时,原始级别(和顺序)将丢失,并使用新级别,而不是合并两个数据帧中的数据。因为没有为第二个数据帧提供fill参数,所以填充值不会出现这种行为。但对于离散x标度,两个数据帧被合并,新的级别是
X1
X2
X3
Z1

无需从所有值中生成一个数据帧,您可以使用
scale\u x\u discrete()
,然后在参数
limits=
中使用函数
levels()
获取
siteno
的原始级别顺序,并将其与
Z1
组合作为参考级别

ggplot(xData, aes(x = siteno , y = V1)) +
  stat_summary(fun.y=mean, colour="red", geom="point") +
  geom_boxplot (aes(fill=siteno), alpha=.5, outlier.colour = "dark gray", 
                                                  outlier.size = 1) +
  geom_boxplot(data=zData, aes(x = siteno , y = V1))+
  scale_x_discrete(limits=c(levels(xData$siteno),"Z1")) 

为什么不将它们全部添加到一个
data.frame
中,并在其中对所有4个级别进行排序

data2 <- rbind(xData, zData)
ggplot(data2, aes(x = siteno , y = V1)) +
stat_summary(fun.y=mean, colour="red", geom="point") +
geom_boxplot (aes(fill=siteno), alpha=.5, width=1, 
              position = position_dodge(width = 1), 
              outlier.colour = "dark gray", outlier.size = 1)

data2捕获所需的顺序,例如:

 ord <- xvars[order(mean(xvars))]

ord为什么不在ggplot列表中询问?感谢您提供的解决方案和精彩的解释<代码>缩放谨慎
非常有效。谢谢你,里卡多。您的解决方案,如上面的Didzis,效果很好。谢谢您的帮助。我使用了前面的解决方案,以便能够更好地控制控制样本箱线图的外观。但毫无疑问,你的方法在未来会派上用场。
 ord <- xvars[order(mean(xvars))]