我正试图让箱形图从具有最低平均值的因子发展到具有最高平均值的因子。这是一个简单的例子:
a = rnorm(10,mean=3,sd=4)
b = rnorm(10,mean=-1,sd=2)
c = rnorm(10,mean=5,sd=6)
d = rnorm(10,mean=-3,sd=1)
e = rnorm(10,mean=0,sd=.5)
labs = c(rep("a",10),rep("b",10),rep("c",10),rep("d",10),rep("e",10))
mean = c(rep(mean(a),10),rep(mean(b),10),rep(mean(c),10),rep(mean(d),10),rep(mean(e),10))
data = c(a,b,c,d,e)
df = data.frame(labs,data,mean)
df = df[order(df$mean),]
boxplot(data~labs,data=df)
#They are not ordered
df$labs = ordered(df$labs, levels=levels(df$labs))
boxplot(data~labs,data=df)
#It doesn't work
我怎样才能得到左边最小的因子,随着我向右走?这有几个主题,但他们的方法对我不起作用。 (也许是因为我的数据格式?)
BONUS POINTS ,帮助我将x轴上的字母旋转180度。
提前致谢!
答案 0 :(得分:6)
boxplot(data~reorder(labs,data),data=df)
编辑文字的轮换
在图形和外边距中,文本只能以角度绘制 90°的倍数,此角度由 las 设置控制。价值 0表示文本始终与相关轴平行绘制(即水平输入 边距1和3,边距2和4垂直)。值为2表示文本始终垂直于相关轴。
绘图区域中的文本绘图(使用文本)将由度数中的 srt 参数控制。
boxplot(data~reorder(labs,data),data=df, las=2,
names=unique( paste(labs,'long')))
text(x=1,y=5,labels='Use srt to rotate text in the
plot region\n but las in figure and outer margins,',
srt=50,cex=1,font=2)
答案 1 :(得分:6)
如果使用ggplot2
,使用轴文本旋转非常简单
theme(axis.text.x = element_text(angle= 90)
library(ggplot2)
ggplot(df, aes(x=reorder(labs, data), y = data)) +
geom_boxplot() +
theme(axis.text.x = element_text(angle=90)) +
labs(x= 'x')
您对ordered
的原始调用不起作用的原因是您从原始数据中传递了级别,这些级别的顺序不正确,级别的顺序应该反映您想要的顺序。据说reorder
是这种情况下的惯用法。
一个lattice
解决方案,所以它不会被遗忘
library(lattice)
bwplot(data~reorder(labs,data), df, scales= list(x= list(rot = 90)))