我在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)
}
答案 0 :(得分:0)
@Dennis在评论中说得正确,scale_y_sqrt()会纠正这个问题。因为中位数和四分位数是顺序统计数据,所以在计算数据之前或之后转换数据无关紧要。