4

我试图让箱线图从平均值最低的因素发展到平均值最高的因素。这是一个简单的例子:

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

我怎样才能让左边最小的因子排序,随着我向右移动而变大?对此有一些线程,但他们的方法对我不起作用。(也许是因为我的数据格式?)

奖励积分帮助我将 x 轴上的字母旋转 180 度。

提前致谢!

4

2 回答 2

7
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)

在此处输入图像描述

于 2013-03-07T00:58:41.870 回答
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)))

在此处输入图像描述

于 2013-03-07T01:15:22.943 回答