2012-03-22 22 views
10

データフレームに実際の欠損値を代入せずにggplot2にボックスのプロットに空のレベルを表示する方法がありません。ここ は再現コードです:geom_boxplot()from ggplot2:空のレベルを強制的に表示する

# 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() 

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

答えて

11

ブレークを適切なスケール関数で制御することができます。この場合はscale_x_discreteです。

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) 

enter image description here


私はggplotに送信する前に私のデータ操作をしたい:あなたは引数drop=FALSEを使用していることを確認してください。私はこれがコードをより読みやすくすると思います。これは私が自分でやる方法ですが、結果は同じです。あなたが休憩を指定する必要はありませんので、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) 
+0

はどうもありがとうございました。これは私の質問に完全に答えます。 ggplot2初心者として、私は問題がgeom_boxplot()のエイジから来ていると思って盲目になり、解決策を見つけることができませんでした。私は明らかにggplotについてもっと学ぶ必要があります。再度、感謝します –

関連する問題