2015-06-09 16 views
6

position_jitterdodge साथ geom_point का उपयोग करते हुए बिना उपयोग position_jitterdodge ही काम करता है जब आप को भरने सौंदर्य निर्धारित किया है। मैं नहीं देख सकता कि यह क्यों होना चाहिए! ,आर/ggplot - भरण सौंदर्य

Error: position_jitterdodge requires the following missing aesthetics: fill 

यह काम करता है, हालांकि:

यह आदेश

library(ggplot2) 
ggplot(diamonds[ sample(nrow(diamonds), 1000), ], 
     aes(x = cut, y = carat, color = clarity)) + 
    geom_point(shape = 21, position = position_jitterdodge()) 

एक त्रुटि का उत्पादन

ggplot(diamonds[ sample(nrow(diamonds), 1000), ], 
     aes(x = cut, y = carat, fill = clarity)) + 
    geom_point(shape = 21, position = position_jitterdodge()) 

enter image description here

सीधे शब्दों में करने के लिए एक एनए मूल्य की आपूर्ति भरने के लिए एक व्यवहार्य वैकल्पिक हल नहीं है:

ggplot(diamonds[ sample(nrow(diamonds), 1000), ], 
     aes(x = cut, y = carat, color = clarity, fill=NA)) + 
    geom_point(shape = 21, position = position_jitterdodge()) 

> Error in seq.default(h[1], h[2], length = n) : 
    'to' cannot be NA, NaN or infinite 

हालांकि यह काम करता है अगर आप एक मनमाना निरंतर (माफ घृणित परिणाम) निर्दिष्ट करें:

ggplot(diamonds[ sample(nrow(diamonds), 1000), ], 
     aes(x = cut, y = carat, color = clarity, fill='constant')) + 
    geom_point(shape = 21, position = position_jitterdodge()) 

enter image description here

कैसे घबराना का उपयोग करने पर कोई भी विचार भरने के बिना/चकमा? (अर्थात रंग अंक केवल)

संपादित करें: @ Joran की टिप्पणी करने के लिए आगे, मैं boxplots अंक ओवरले करना चाहते हैं। के बाद से एक जरूरी fill उपयोग करने के लिए boxplots अंतर करने के लिए नहीं जा रहा है, यह बहुत अच्छा है, तो geom_point(position=position_jitterdodge())fill बिना समायोजित भूखंडों होगा। हो सकता है कि वर्तमान में संभव नहीं है, हालांकि ...

#This doesn't work: 
ggplot(diamonds[ sample(nrow(diamonds), 1000), ], 
     aes(x = cut, y = carat, color = clarity)) + 
    geom_boxplot() + 
    geom_point(shape = 21, position = position_jitterdodge()) 

#This does, although obviously no one wants a plot like this 
ggplot(diamonds[ sample(nrow(diamonds), 1000), ], 
     aes(x = cut, y = carat, color = clarity, fill='constant')) + 
    geom_boxplot() + 
    geom_point(shape = 21, position = position_jitterdodge()) 

#This is way it's intended to work, but marries you to 'fill' 
ggplot(diamonds[ sample(nrow(diamonds), 1000), ], 
     aes(x = cut, y = carat, fill = clarity)) + 
    geom_boxplot() + 
    geom_point(shape = 21, position = position_jitterdodge()) 
+2

यह एक बग नहीं है के लिए एक अच्छे उम्मीदवार। इस _feature_ के मूल टाल बॉक्स भूखंडों जो 'fill' के माध्यम से टाल दिया है (जो स्पष्ट रूप से' पर दस्तावेज़ में संदर्भित है? position_jitterdodge') के शीर्ष पर बिंदु लगाने के लिए विशिष्ट आवश्यकता थी। मैं मानता हूं कि यह अच्छा होगा अगर यह बॉक्स प्लॉट के बिना काम करता है, लेकिन यह सिर्फ एक अप्रत्याशित उपयोग केस है, बग नहीं। – joran

+0

असल में, बॉक्सप्लॉट्स पर ओवरलेइंग बिल्कुल वही है जो मैं करना चाहता हूं, हालांकि मेरे मामले में बॉक्सप्लॉट रंग से डूब गए हैं। मैंने बीसी के ऊपर के न्यूनतम उदाहरण से इसे छोड़ा, यह प्रासंगिक प्रतीत नहीं हुआ, लेकिन मैं इसे वापस जोड़ दूंगा। – arvi1000

+2

मैं इसे ggplot2 फोर्किंग करके काम करने के लिए प्राप्त कर सकता हूं और भरने के बजाय 'रंग' का उपयोग करने के लिए बस 'position_jitterdodge' को संपादित कर सकता हूं। लेकिन मुझे यकीन नहीं है कि आप किसी भी मामले को संभालने के लिए उस समारोह को कैसे लिखेंगे (कम से कम, इसे अच्छी तरह से कैसे लिखना है)। – joran

उत्तर

4

ठीक है, यहाँ मेरी वैकल्पिक हल है। (मेरे मामले में color) सौंदर्य आप वास्तव में चाहते हैं के साथ fill निर्दिष्ट करें, फिर खाली बाहर के साथ scale_fill_manual

मैं एक अलग नकली डाटासेट अधिक अपने वास्तविक उपयोग के मामले के समान है कि उत्पादन को भरने, हीरे डेटा isn ऊपर निर्दिष्ट के रूप में 'के बाद से टी वास्तव में बॉक्स + अंक

my_dat <- data.frame(class=factor(rep(1:2, 600)), 
        y=rnorm(1200)), 
        x=rep(letters[1:3], each=400)) 

ggplot(my_dat, aes(x=x, y=y, fill=class, color=class)) + 
    geom_boxplot(outlier.shape = NA) + 
    geom_point(shape = 21, alpha = 0.5, position=position_jitterdodge()) + 
    scale_fill_manual(values = rep(NA, 2)) 

enter image description here

संबंधित मुद्दे