लीजेंड ggplot 2.2 निकालें


250

मैं एक परत (चिकनी) की किंवदंती रखने और दूसरे (बिंदु) की कथा को दूर करने की कोशिश कर रहा हूं। मैंने के साथ किंवदंतियों को बंद करने की कोशिश की है guides(colour = FALSE)और geom_point(aes(color = vs), show.legend = FALSE)

संपादित करें : जैसा कि यह सवाल और इसके उत्तर लोकप्रिय हैं, एक प्रतिलिपि प्रस्तुत करने योग्य उदाहरण क्रम में लगता है:

library(ggplot2)
ggplot(data = mtcars, aes(x = mpg, y = disp, group = gear)) +
geom_point(aes(color = vs)) +
geom_point(aes(shape = factor(cyl))) +
geom_line(aes(linetype = factor(gear))) +
geom_smooth(aes(fill = factor(gear), color = gear)) + 
theme_bw() 

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


5
एक न्यूनतम प्रजनन योग्य उदाहरण बहुत सरल होगा। कोड की लंबी लाइन में कई अनावश्यक (हाथ में समस्या) कोड के साथ-साथ यह पूरी तरह से अप्रतिबंधित होने के रूप में प्रकट होता है जैसा कि वर्तमान में लिखा गया है।
एमएन

जवाबों:


445

से आर रसोई की किताब है, जहां बीपी अपने ggplot है:

एक विशेष सौंदर्य के लिए किंवदंती निकालें (भरें):

bp + guides(fill=FALSE)

पैमाने निर्दिष्ट करते समय यह भी किया जा सकता है:

bp + scale_fill_discrete(guide=FALSE)

यह सभी किंवदंतियों को दूर करता है:

bp + theme(legend.position="none")

25
@Alex द्वारा एक टिप्पणी के जवाब के रूप में: ध्यान दें कि theme_bw()किसी भी परिभाषा का उपयोग करके किए गए हस्तक्षेप कर सकते हैं theme()। उपयोग करते समय theme_bw(), किसी अन्य थीम विकल्पों को बदलने से पहले इसे कथानक में जोड़ना सुनिश्चित करें।
फेबरन

1
लेकिन जब मैं ऐसा कुछ करता हूं तो bp + theme(legend.position="none") + theme_classic()किंवदंतियां वापस आ जाती हैं। तो इसे कैसे निकालें?
लवआर

3
@loveR ने पहले theme_classic डाला:bp + theme_classic() + theme(legend.position="none")
परिकल्पना

1
इससे मेरे कथानक पर कोई प्रभाव नहीं पड़ा। मैंने @TJbo के दृष्टिकोण का सफलतापूर्वक उपयोग किया।
जेम्स हिर्स्चोर्न

80

इसका एक और समाधान हो सकता है:
आपका कोड था:

geom_point(aes(..., show.legend = FALSE))

आप निर्दिष्ट कर सकते show.legendपैरामीटर के बादaes कॉल:

geom_point(aes(...), show.legend = FALSE)

तब संबंधित कथा गायब हो जानी चाहिए


3
यह एक बहुत अच्छा तरीका है। साथ ही अधिक सहज।
patL

2
यह वह समाधान था जिसने वर्णों को हटाने के लिए काम किया था जब मैंने रंग में लाइनों को एनोटेट करने के लिए geom_text का उपयोग किया था। कोई scale_labelआदेश नहीं है (न ही इसका कोई मतलब नहीं है), और guide(label = FALSE)यह भी काम नहीं किया। धन्यवाद!
मेलिसा की

45

जैसा कि प्रश्न और उपयोगकर्ता 3490026 का उत्तर एक शीर्ष खोज हिट है, मैंने एक प्रतिलिपि प्रस्तुत करने योग्य उदाहरण और अब तक किए गए सुझावों का एक संक्षिप्त चित्रण किया है, साथ में एक समाधान भी है जो ओपी के प्रश्न को स्पष्ट रूप से संबोधित करता है।

चीजों में से एक जो ggplot2करता है और जो भ्रमित हो सकता है वह यह है कि यह स्वचालित रूप से कुछ किंवदंतियों को मिश्रित करता है जब वे एक ही चर के साथ जुड़े होते हैं। उदाहरण के लिए, factor(gear)दो बार, एक बार के लिए linetypeऔर एक बार के लिए प्रकट होता है fill, जिसके परिणामस्वरूप एक संयुक्त किंवदंती होती है। इसके विपरीत, gearइसकी खुद की किंवदंती प्रविष्टि है क्योंकि यह उसी के समान नहीं है factor(gear)। अब तक दिए गए समाधान आमतौर पर अच्छी तरह से काम करते हैं। लेकिन कभी-कभी, आपको गाइड को ओवरराइड करने की आवश्यकता हो सकती है। मेरे अंतिम उदाहरण को नीचे देखें।

# reproducible example:
library(ggplot2)
p <- ggplot(data = mtcars, aes(x = mpg, y = disp, group = gear)) +
geom_point(aes(color = vs)) +
geom_point(aes(shape = factor(cyl))) +
geom_line(aes(linetype = factor(gear))) +
geom_smooth(aes(fill = factor(gear), color = gear)) + 
theme_bw() 

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

सभी किंवदंतियों को निकालें: @ user3490026

p + theme(legend.position = "none")

सभी किंवदंतियों को दूर करें: @duhaime

p + guides(fill = FALSE, color = FALSE, linetype = FALSE, shape = FALSE)

किंवदंतियों को बंद करें: @Tjebo

ggplot(data = mtcars, aes(x = mpg, y = disp, group = gear)) +
geom_point(aes(color = vs), show.legend = FALSE) +
geom_point(aes(shape = factor(cyl)), show.legend = FALSE) +
geom_line(aes(linetype = factor(gear)), show.legend = FALSE) +
geom_smooth(aes(fill = factor(gear), color = gear), show.legend = FALSE) + 
theme_bw() 

भराव हटाएं ताकि लिनेटाइप दिखाई दे

p + guides(fill = FALSE)

Scale_fill_ फ़ंक्शन के माध्यम से ऊपर के समान:

p + scale_fill_discrete(guide = FALSE)

और अब ओपी के अनुरोध का एक संभावित उत्तर

"एक परत (चिकनी) की किंवदंती रखने के लिए और दूसरे (बिंदु) की कथा को दूर करने के लिए"

कुछ को एड-हॉक पोस्ट-हॉक से कुछ चालू करें

p + guides(fill = guide_legend(override.aes = list(color = NA)), 
           color = FALSE, 
           shape = FALSE)  

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


2
बस आखिरी प्लॉट में नीले रंग को भरने पर ध्यान दिया गया है, ग्राफ पर दिखाई नहीं देता है, निश्चित रूप से क्यों नहीं ...
पैट्रिकटी

टाइप करने के warnings()बाद आप अपना कोड चलाएं और आपको नीली रिबन दिखाई न देने का कारण दिखाई देगा।
मार्कस

@markus: धन्यवाद मिल गया! मैं उदाहरण को संपादित करने के लिए परेशान नहीं करूंगा, क्योंकि समस्या अलग है। हालांकि, seजब यह गणना नहीं होती है , तो इसके लिए एक किंवदंती होना बहुत कम समझ में आता है । शायद GitHub पर एक मुद्दा लायक है, लेकिन मैं ऊर्जा अभी भी नहीं है ...
PatrickT

13

यदि आपका चार्ट दोनों fillऔर colorसौंदर्यशास्त्र का उपयोग करता है , तो आप किंवदंती को हटा सकते हैं:

+ guides(fill=FALSE, color=FALSE)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.