1

我在 R 中有几个箱须图。在两者中,x 轴对应于一个分类变量,而分组颜色对应于另一个。

如果我用未转换的 y 轴绘制两个图,它们都很好。但是,如果我尝试对 y 轴进行平方根变换(使用:coord_trans(y = "sqrt")),其中一个图形仍然可以,而另一个则丢弃与大多数框中的中位数相对应的线(除了那些其中只有两组,因此方框略宽,请参见第一个图上的“数字”1 和 2)。此外,对于未正确绘制的图表,如果我减少 x 轴上的类别数量(因此再次使框变宽),中线会再次出现。

这是 coord_trans 的错误(如果是,我该如何解决)还是我的代码有问题?

非常感谢您的任何建议。

library(car)
library(gplots)
library(plyr)
library(ggplot2)
library(gridExtra)
library(gdata)

Category=factor(c(rep(1, times =3240), rep(2, times =2160)), 
                labels=c("A","B"), levels=c(1,2))
ID=factor(rep(seq(from = 1, to = 45),each = 120))
Months=factor(rep(seq(from = 1, to = 3), each = 40, times = 45),
              labels=c("Jan","Feb","Mar"),levels=c(1:3))
Obs=rnorm(5400, mean=25, sd=15)
Data=data.frame(Category,ID,Months,Obs)

Data=subset(Data, (Data$Category=="B") | !(Data$ID%in%c(1,2)) | 
              (Data$Months%in%c("Jan","Feb")))

for (j in 1:2)
{
  sel=which(Data$Category==unique(levels(Data$Category))[j])
  Observ=Data$Obs[sel]
  Month=Data$Months[sel]
  Number=droplevels(Data$ID[sel])
  Number=droplevels(Number)
  Data_used=data.frame(Number,Month,Observ)
  plot1 = ggplot(Data_used, aes(Number, Observ)) +
    geom_boxplot(aes(fill=Month, drop=FALSE), na.rm=TRUE) +  
    scale_y_continuous(breaks = c(0,20,40,60,80,100), limits=c(0,115)) + 
    coord_trans(y = "sqrt")
  plot(plot1)
}
4

1 回答 1

0

@Dennis 在他的评论中是正确的, scale_y_sqrt() 将纠正这一点。因为中位数和四分位数是顺序统计数据,所以在计算它们之前还是之后转换数据并不重要。

于 2013-04-07T01:37:01.573 回答