Ggplot2 में अतिरिक्त किंवदंतियों को हटा दें


91

मेरे पास एक सरल डेटा फ्रेम है जिसे मैं एक संयुक्त लाइन और पॉइंट प्लॉट का उपयोग करने की कोशिश कर रहा हूं ggplot2। मेरे डेटा को देखकर ऐसा लगता है:

df <- data.frame(x=rep(1:10,2), y=c(1:10,11:20), 
                 group=c(rep("a",10),rep("b",10)))

और मैं एक प्लॉट बनाने की कोशिश कर रहा हूं:

g <- ggplot(df, aes(x=x, y=y, group=group))
g <- g + geom_line(aes(colour=group))
g <- g + geom_point(aes(colour=group, alpha = .8))
g

परिणाम एक अपवाद के साथ ठीक दिखता है। इसमें alphaमेरी geom_pointपरत के लिए एक अतिरिक्त किंवदंती है ।

<Code> geom_point </ code> पारदर्शिता के लिए अतिरिक्त किंवदंती

मैं समूह रंग दिखाते हुए किंवदंती को कैसे रख सकता हूं, लेकिन वह नहीं जो मेरी अल्फा सेटिंग्स दिखाता है?

जवाबों:


172

एक कॉल के भीतर सौंदर्यशास्त्र को सेट या मैप किया जा सकता है ggplot

  • एक सौंदर्य में परिभाषित किया aes(...)जाता है मैप किया गया डेटा से, और एक किंवदंती बनाया।
  • एक सौंदर्यशास्त्र को एक मूल्य पर सेट किया जा सकता है , इसे बाहर परिभाषित करके aes()

इस मामले में, ऐसा लगता है कि आप सेट alpha = 0.8 और मैप करना चाहते हैं colour = group

यह करने के लिए,

परिभाषा के alpha = 0.8बाहर रखें aes()

g <- ggplot(df, aes(x = x, y = y, group = group))
g <- g + geom_line(aes(colour = group))
g <- g + geom_point(aes(colour = group), alpha = 0.8)
g

यहाँ छवि विवरण दर्ज करें

किसी भी मैप किए गए वैरिएबल के लिए आप guide = 'none'उचित scale_...कॉल का उपयोग करके एक लीजेंड की उपस्थिति को दबा सकते हैं । जैसे।

g2 <- ggplot(df, aes(x = x, y = y, group = group)) + 
        geom_line(aes(colour = group)) +
        geom_point(aes(colour = group, alpha = 0.8))
g2 + scale_alpha(guide = 'none')

जो एक समान प्लॉट लौटाएगा

EDIT @ जोरन की टिप्पणी स्पॉट-ऑन है, मैंने अपना उत्तर अधिक व्यापक बना दिया है


18
यह सही विधि है, क्योंकि ओपी सौंदर्यशास्त्र की मैपिंग के बजाय सेट कर रहा है, लेकिन सामान्य तौर पर आप किसी चीज़ का उपयोग करके किसी भी किंवदंती की उपस्थिति को दबा सकते हैं g + scale_alpha(guide = "none")
जोरन

वास्तव में। इसका उत्तर विस्तृत रूप से दिया गया है। यह एक व्यापक जवाब देने के लिए अधिक समझ में आता है, न कि केवल ओपी मुद्दे के लिए विशिष्ट।
mnel

4
अतिरिक्त स्पष्टीकरण के लिए बहुत बहुत धन्यवाद। यह मुझे ggplot के दर्शन को समझने में मदद करने की दिशा में एक लंबा रास्ता तय करता है।
वाइल्डक जूल

2
मैं एक वर्ष से अधिक के लिए ggplot का उपयोग कर रहा हूं और मैंने मैप किए गए या सेट किए गए चर के बीच के अंतर को नहीं समझा है। यह अब तक का सबसे अच्छा SO उत्तर है जिसे मैंने कभी देखा है, बधाई।
अमित कोहली

1
@forestecologist ऐसा इसलिए है क्योंकि groupसौंदर्यशास्त्र अपने आप कोई पैमाना या मार्गदर्शक नहीं उत्पन्न करता है। यह हमेशा कुछ और संशोधित करने की तरह है। आपको "समूह" सौंदर्यशास्त्र के लिए एक किंवदंती कभी नहीं मिलेगी।
18'18

41

show.legend = Fउस भाग के बाद कोड जोड़ें जहां आप इसे नहीं चाहते हैं।

g <- ggplot(df, aes(x=x, y=y, group=group))
g <- g + geom_line(aes(colour=group))
g <- g + geom_point(aes(colour=group, alpha = .8), show.legend = F)

1
मानचित्रण बनाम सेटिंग सौंदर्यशास्त्र की तुलना में यह बहुत अधिक सहज है (हालांकि यह बहुत गलतफहमी को साफ करता है)
वासादामो

1

Ggplot2 के पुराने संस्करणों (0.9.2 से पहले के संस्करण, 2012 के अंत में जारी किए गए) के लिए, इस जवाब पर काम करना चाहिए:

मैं एक के साथ यह कोशिश की colour_scaleऔर यह काम नहीं किया। ऐसा प्रतीत होता है कि colour_scale_hueआइटम डिफ़ॉल्ट पैरामीटर के साथ फ़ंक्शन की तरह काम करता है TRUE। मैंने जोड़ा scale_colour_hue(legend=FALSE)और यह काम किया।

मुझे यकीन नहीं है कि यह ggplot में सभी रंग पैमाने की वस्तुओं के लिए मामला है


3
में उपयोग कर legendरहा हैscale_*कॉल बेहतर है, करना बेहतर है scale_colour_hue(guide = "none")
ग्रेगर थॉमस

3
यह ध्यान में रखते हुए कि legend=FALSE@shujaa टिप्पणी द्वारा बताया गया है कि यह पदावनत है, यह प्रभावी रूप से एक डुप्लिकेट उत्तर है, अर्थात guide = "none"एक scale_fill/color*फ़ंक्शन को जोड़ने के लिए ।
डेविड लेबॉउर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.