gpt4 book ai didi

r - ggplot2 - boxplot 多个 data.frames 同时保持秩序

转载 作者:行者123 更新时间:2023-12-02 00:02:18 26 4
gpt4 key购买 nike

如果这更适合 SO 而不是 CV,我深表歉意。

我试图将第二个箱线图包含到现有箱线图中,该箱线图按绘制的值的平均值排序。当我包含第二个 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)

这将生成以下图,其中 x 变量按平均值正确排序:

correctly ordered boxplots

如果我尝试使用下面的代码添加控制数据,x 变量的顺序将丢失:
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) +
geom_boxplot(data=zData, aes(x = siteno , y = V1))

这将生成以下图,没有对 x 变量进行排序:
incorrectly ordered boxplots

我的图表的重点是显示按平均值排序的测试值,然后将控制值箱线图放在右侧以供视觉引用。我想可能会有一个结合 xData 和 zData 数据帧的解决方案;如果有一些建议,我愿意尝试。
感谢您的时间。

最佳答案

当您使用两个数据框将数据合并到一个图中时,原始级别(和顺序)会丢失,并且会使用新级别而不是合并来自两个数据框的数据。填充值不会出现这种行为,因为您没有为第二个数据框提供填充参数。但是对于离散的 x 尺度,两个数据框都被组合在一起,新的水平是 X1 , X2 , X3Z1 .

无需从所有值制作一个数据框,您就可以使用 scale_x_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"))

enter image description here

关于r - ggplot2 - boxplot 多个 data.frames 同时保持秩序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20616531/

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