如果这更多是针对SO而不是简历,我道歉。
我试图将第二个箱图包含到现有的箱形图中,该框图按照绘制的值的平均值排序。当我从第二个data.frame包含boxplot(将控件样本表示到其他图表)时,原始图表将失去其排序。
以下是一个例子:
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个变量按平均值排序:
如果我尝试下面的代码添加控制数据,则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变量的排序:
我的图表的要点是显示按其平均值排序的测试值,然后将控制值boxplot向右移动以供视觉参考。我想可能有一个结合xData和zData数据帧的解决方案;如果有一些建议,我愿意尝试。 感谢您的时间。
答案 0 :(得分:2)
当您使用两个数据帧在一个图中组合数据时,原始级别(和顺序)将丢失,并且将使用比两个数据帧中的数据组合的新级别。您没有为填充值获取此行为,因为您没有为第二个数据框提供填充参数。但对于离散x标度,两个数据帧都会合并,新级别为X1
,X2
,X3
和Z1
。
如果没有从所有值中创建一个数据框,您可以使用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"))
答案 1 :(得分:1)
为什么不将它们全部添加到一个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)
答案 2 :(得分:0)
捕获所需的顺序,例如:
ord <- xvars[order(mean(xvars))]
然后使用scale_x_discrete()