在"长"数据结构中,用R的平均值对R中的箱图进行排序

gen*_*ser 4 r boxplot

我试图让箱形图从具有最低平均值的因子发展到具有最高平均值的因子.这是一个简单的例子:

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
Run Code Online (Sandbox Code Playgroud)

我怎样才能得到左边最小的因子,随着我向右走?这有几个主题,但他们的方法对我不起作用.(也许是因为我的数据格式?)

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

提前致谢!

ags*_*udy 6

boxplot(data~reorder(labs,data),data=df)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

编辑文本的旋转

在图形和外边距中,文本只能以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)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


mne*_*nel 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')
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

您的原始调用ordered不起作用的原因是您从原始数据中传递了级别,这些级别的顺序不正确,级别的顺序应该反映您想要的顺序.这reorder就是在这种情况下的惯用方法.

一个lattice解决方案,所以它不会被遗忘

library(lattice)
bwplot(data~reorder(labs,data), df, scales=  list(x= list(rot = 90)))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述