2012-03-22 6 views
10

दिखाई देने के लिए खाली स्तर को मजबूर करना मुझे वास्तविक लापता मानों के साथ अपना डेटाफ्रेम लागू किए बिना बॉक्सप्लॉट में खाली स्तर दिखाने के लिए ggplot2 से पूछने का कोई तरीका नहीं मिल रहा है।geom_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() 

तो मुझे लगता है कि मैं कुछ याद कर रहा हूँ: यहाँ प्रतिलिपि प्रस्तुत करने योग्य कोड है। संतुलित प्रयोग से निपटने में यह कोई समस्या नहीं है, जहां इन लापता डेटा डेटाफ्रेम में स्पष्ट हो सकते हैं। लेकिन उदाहरण के लिए एक समूह में मनाए गए डेटा के साथ, इसका मतलब है कि असंबद्ध संयोजनों के लिए अनुपलब्ध मानों वाले डेटा को लागू करना ... आपकी सहायता के लिए धन्यवाद।

उत्तर

11

आप इस मामले में 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) 

enter image description here


मैं इसे 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) 
+0

आपको बहुत बहुत धन्यवाद। यह पूरी तरह से मेरे प्रश्न का उत्तर देता है। Ggplot2 शुरुआती के रूप में, मुझे यह समझने में अंधा हो गया कि समस्या geom_boxplot() के एईएस से आई है और इसलिए समाधान खोजने में विफल रहा। मुझे स्पष्ट रूप से ggplot के बारे में और जानने की जरूरत है। एक बार फिर धन्यवाद –