2012-03-22 21 views
10

Ggplot2'den, gerçek veri eksikliğim ile veri çerçevemi etkilemeden bir kutu boşluğunda boş bir seviye göstermesini istemek için bir yol bulamıyorum. geom_boxplot() from ggplot2: görünmek için boş bir seviyeye zorlamak

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

Ben de bir şey eksik tahmin: İşte tekrarlanabilir kodudur. Bu eksik verilerin veri çerçevesinde açık olabileceği dengeli bir deneyle uğraşırken bu bir sorun değildir. Ancak, bir kohortta gözlemlenen veriler, örneğin, gözlemlenmemiş kombinasyonlar için verileri eksik değerlerle çarpmak anlamına gelir ... Yardımlarınız için teşekkürler.

cevap

11

Molaları uygun bir ölçek işlevinde, bu durumda scale_x_discrete denetleyebilirsiniz. Eğer argüman drop=FALSE kullandığınızdan emin olun:

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

Ben ggplot göndermeden öncesinde verilerim manipülasyon yapmak ister

. Bence bu kodu daha okunabilir hale getiriyor. Bu ben kendim böyle yapardım, ama sonuçlar aynı. Bununla birlikte, ggplot ölçeğinin daha kolay hale geldiğini unutmayın, çünkü araları belirtmeniz gerekmediğinden,

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

Çok teşekkür ederiz. Bu soruyu mükemmel bir şekilde cevaplıyor. Bir ggplot2 acemi olarak, problemin jeom_boxplot() 'dan gelen sorundan geldiğini ve bu yüzden bir çözüm bulamadığını düşünerek körlemiştim. Açıkçası ggplot hakkında daha fazla şey öğrenmem gerek. Tekrar teşekkürler –