10

データフレームに実際の欠損値を代入せずに、ggplot2 に boxplot に空のレベルを表示するように依頼する方法が見つかりません。再現可能なコードは次のとおりです。

# fake data
dftest <- expand.grid(time=1:10,measure=1:50)
dftest$value <- rnorm(dim(dftest)[1],3+0.1*dftest$time,1)

# and let's suppose we didn't observe anything at time 2

# doesn't work even when forcing with factor(..., levels=...)
p <- ggplot(data=dftest[dftest$time!=2,],aes(x=factor(time,levels=1:10),y=value))
p + geom_boxplot()

# only way seems to have at least one actual missing value in the dataframe
dftest2 <- dftest
dftest2[dftest2$time==2,"value"] <- NA
p <- ggplot(data=dftest2,aes(x=factor(time),y=value))
p + geom_boxplot()

だから私は何かが欠けていると思います。これらの欠落データがデータフレームで明示される可能性があるバランスの取れた実験を扱う場合、これは問題ではありません。しかし、たとえばコホートで観測されたデータでは、観測されていない組み合わせの欠損値をデータに代入することを意味します...助けてくれてありがとう。

4

1 に答える 1

16

この場合は、適切なスケール関数でブレークを制御できますscale_x_discrete。必ず引数を使用してくださいdrop=FALSE:

p <- ggplot(data=dftest[dftest$time!=2,],aes(x=factor(time,levels=1:10),y=value))
p + geom_boxplot() + 
  scale_x_discrete("time", breaks=factor(1:10), drop=FALSE)

ここに画像の説明を入力


に送信する前にデータ操作を行うのが好きggplotです。これにより、コードが読みやすくなると思います。これは私が自分で行う方法ですが、結果は同じです。ただし、ggplotブレークを指定する必要がないため、スケールがはるかに単純になることに注意してください。

dfplot <- dftest[dftest$time!=2, ]
dfplot$time <- factor(dfplot$time, levels=1:10)

ggplot(data=dfplot, aes(x=time ,y=value)) +
    geom_boxplot() + 
    scale_x_discrete("time", drop=FALSE)
于 2012-03-22T08:57:24.280 に答える