1

R にはいくつかのボックス プロットとウィスカー プロットがあります。どちらの場合も、x 軸は 1 つのカテゴリ変数に対応し、グループ化の色は別の変数に対応します。

変換されていない y 軸で両方のプロットを描画すると、どちらも問題ありません。ただし、y 軸を平方根変換しようとすると (coord_trans(y = "sqrt") を使用)、これらのグラフの 1 つはまだ問題なく、他のグラフはほとんどのボックスの中央値に対応する線を削除します (それらを除く)。 2 つのグループしかないため、ボックスがわずかに広い場合は、最初のプロットの「数値」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 に答える