ggplot:如何指定多个箱线图的垂直顺序?

5
我希望您能帮助我更改下方图表中医院的堆叠顺序,使得#1位于顶部,#4位于底部。
该图表是使用生成的:
ggplot(survey,aes(x=hospital, y=age))+geom_boxplot()+coord_flip()+xlab("")+ylab ("\nPatient Age")

我希望将列表的排列顺序由自上而下改为自下而上。不确定为什么目前是自上而下的方式。如果有影响,"hospital"列是一个因素。

非常感谢!

alt text

1个回答

10

您有几个选择。最简单的方法是添加

p + scale_x_reverse()

将因子的水平翻转可以改变图表的显示方式。

relevel(survey$hospital, rev(levels(survey$hospital))) -> survey$hospital

或者,你可以用 xlim() 手动确定你希望盒子的顺序。

p + xlim("Hospital #4","Hospital #3","Hospital #2","Hospital #1")

从语义上讲,我认为第二个选项是最好的。它将数据形式的操作与绘图代码分开。 - Richie Cotton
第一个出现了错误: 错误:提供给scale_x_reverse的变量不连续。 另外:警告信息: 在Ops.factor(x)中:-对因子无意义。但第三个正常工作。我没有重新调整它们的级别,因为如果我显示survey$hospital,它们已经按自然顺序排列(1、2、3、4)。 - wishihadabettername
2
我认为 scale_x_reverse 只适用于连续值。 - mindless.panda
@RichieCotton,我很好奇你为什么更喜欢在绘图之前操作数据框 - 我的偏好是尽可能保持数据框的原始状态,在绘图中进行必要和合理的操作。如果绘图代码有问题,我喜欢能够查看原始数据框。 - NiuBiBang
@DaNiu 在你得到正确的绘图之前,通常需要多次绘制。如果数据已经处于正确的形式(而不是每次重新操作),则重新绘制会更快。更重要的是,将数据操作步骤与绘图步骤分开可以使代码更易读。 - Richie Cotton

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接