कैसे ggplot में किंवदंती शीर्षक बदलने के लिए


299

मेरे पास नीचे की तरह निम्नलिखित कथानक हैं। इसे इस कमांड के साथ बनाया गया था:

library(ggplot2)

df <- data.frame(cond = factor(rep(c("A", "B"), each = 200)), 
                 rating = c(rnorm(200), rnorm(200, mean=.8)))

ggplot(df, aes(x=rating, fill=cond)) + 
geom_density(alpha = .3) +
xlab("NEW RATING TITLE") +
ylab("NEW DENSITY TITLE")

अब अगली बात जो मैं करना चाहता हूं, वह है लीजेंड टाइटल को कॉन्ड से न्यू लेगेंड टाइटल में बदलना ।

तो मैंने जो किया वह सिर्फ उपरोक्त पंक्ति के अंत में निम्नलिखित पंक्ति जोड़ने के लिए है:

+labs(colour="NEW LEGEND TITLE")

लेकिन यह काम नहीं करता है। इसे करने का सही तरीका क्या है?

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


110
labs(fill="xyz")करना चाहिए
बपतिस्मा देने वाला

1
@baptiste मैं आपकी टिप्पणी को देखे बिना कई बार इस सवाल पर वापस आया हूं, क्या आप इसे उत्तर के रूप में लिख सकते हैं? IMO यह सबसे सरल उपाय है और कुछ मान्यता के हकदार हैं
User632716

3
@ User632716 यह पहले से ही किसी के जवाब में नीचे है
बपतिस्मा

7
यह काम नहीं करता है ...
shenglih

1
कई geom_बयानों के साथ भूखंडों से जुड़े उत्तर की तलाश करने वालों के लिए , मैं stackoverflow.com/a/38485985/1169233 पर जवाब देने की सलाह देता हूं , यह केवल वही है जो मेरे लिए काम करता है।
वाल्डिर लियोनसियो

जवाबों:


347

यह काम करना चाहिए:

p <- ggplot(df, aes(x=rating, fill=cond)) + 
           geom_density(alpha=.3) + 
           xlab("NEW RATING TITLE") + 
           ylab("NEW DENSITY TITLE")
p <- p + guides(fill=guide_legend(title="New Legend Title"))

(या वैकल्पिक रूप से)

p + scale_fill_discrete(name = "New Legend Title")

10
एक अन्य विकल्प हैp$labels$fill <- "New Legend Title"
एलेक्स होलकोम्बे

3
गाइड और scale_fill_discrete के बीच अंतर क्या है
Medhat

18
p$labels$fillमेरे लिए काम नहीं किया। ggplot2_2.1.0I का उपयोग करने के साथp$labels$colour <- "New legend title"
ClementWalter

4
p$labels$fill अच्छा है, लेकिन अगर आप एने में एक से अधिक चर (सौंदर्य, रंग, आकार) का उपयोग कर रहे हैं, तो आपको उन्हें प्रत्येक के लिए अलग-अलग बदलना होगा।
शिष्य संख्या

226

मैंने इसमें ज्यादा खुदाई नहीं की लेकिन क्योंकि आपने ggplot () में fill = cond का उपयोग किया था,

 + labs(color='NEW LEGEND TITLE') 

शायद काम नहीं किया। हालाँकि यह रंग को भरने से बदल देता है , यह काम करता है!

+ labs(fill='NEW LEGEND TITLE') 

यह मेरे लिए ggplot2_2.1.0 में काम किया


20
मुझे लगता है कि यह सबसे स्पष्ट जवाब है, यह वही करता है जो ओपी एक अतिरिक्त लाइन के साथ पूछता है
लियो

3
दोनों रंग = और भरना = काम करना चाहिए। यह प्रश्न का "सही" उत्तर है, IMO
Dan

3
क्या रंग भरना काम करेगा यह इस बात पर निर्भर करता है कि "कंडस" (या अन्य मामलों में समूह) वास्तव में मैप किया गया है। एक अच्छी व्याख्या रसोई की
किताब-r.com/Graphs/Legends_(ggplot2

3
यह सबसे अच्छा जवाब है।
अक्षय गौड़

1
नोट: ggplot2 3.0+ में यह समाधान काम नहीं आया: इसे हल कियाp + guides(fill=guide_legend(title="New Legend Title"))
सुमंत लाजर

39

चूंकि आपके पास दो घनत्व हैं, इसलिए मुझे लगता है कि आप अपने स्वयं के रंगों को सेट करना चाह सकते हैं scale_fill_manual

यदि आप ऐसा कर सकते हैं:

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

legend_title <- "OMG My Title"

ggplot(df, aes(x=x, fill=group)) + geom_density(alpha=.3) +   
    scale_fill_manual(legend_title,values=c("orange","red"))

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


27

उपरोक्त कोड में से किसी ने भी मेरे लिए काम नहीं किया।

यहां मैंने जो पाया और यह काम किया।

labs(color = "sale year")

आप \nअंत में जोड़कर शीर्षक और प्रदर्शन के बीच एक स्थान भी दे सकते हैं ।

labs(color = 'sale year\n")


2
यह इस उत्तर से अलग कैसे है ?
मरवा

3
हां, मैंने ऊपर दिए गए हर एक उदाहरण की कोशिश की और यह एकमात्र ऐसा है जिसने मेरे लिए काम किया। धन्यवाद!
समरइला जूल

इस कार्य को मूल पोस्ट प्रश्न कैसे दिया जाएगा, ऐसा लगता है कि fillइसके बजाय color(या colour) की आवश्यकता है? प्रश्न के समय को देखते हुए, यह संभव है कि यह ggplot2संस्करण से संबंधित है।
स्टीवेब

1
@ मर्व मुख्य अंतर यह है कि यह वास्तव में काम करता है।
लुइस डी सूसा

16

चूंकि आपके कोड में आपने ggplot(data, fill= cond)हिस्टोग्राम बनाने के लिए उपयोग किया था, इसलिए आपको लेबल अनुभाग में "फिल" का उपयोग करके किंवदंती शीर्षक जोड़ना होगा +labs(fill="Title name")। यदि आप एक अलग प्रकार के प्लॉट का उपयोग कर रहे थे, जहां कोड ggplot (डेटा, रंग = कंडोम) था, तो आप उपयोग कर सकते हैं +labs(colour= "Title Name")। सारांश में, लैब तर्क को ऐस तर्क से मेल खाना है।

मैंने + guides(fill=guide_legend("my awesome title"))geom_bar भूखंडों पर किंवदंती शीर्षक बदलने के लिए उपयोग किया है लेकिन यह geom_point के लिए काम नहीं करता था।


..., लेकिन इसके लिए geom_point(), यह मेरे लिए काम करता है:guides(color=guide_legend("Type:"))
ज्ञात

1
@knb, आपकी विधि काम करती है:guides(color=guide_legend("Score Ranking:"))
bmc

1
यह कैसे अलग है कि यह जवाब ?
मर्व

6

एक और बहुत सरल उत्तर है जो कुछ सरल रेखांकन के लिए काम कर सकता है।

बस अपने ग्राफ में guide_legend () में कॉल जोड़ें।

ggplot(...) + ... + guide_legend(title="my awesome title")

जैसा कि बहुत अच्छे ggplot डॉक्स में दिखाया गया है ।

यदि वह काम नहीं करता है, तो आप गाइड के लिए कॉल के साथ अपने गाइड पैरामीटर को अधिक सटीक रूप से सेट कर सकते हैं :

ggplot(...) + ... + guides(fill=guide_legend("my awesome title"))

आप अपनी कॉल के लिए इन मापदंडों को निर्दिष्ट करके आकार / रंग / आकार भी भिन्न कर सकते हैं guides


26
यह मेरे लिए काम नहीं किया, लेकिन qplot(…) + guides(color=guide_legend(title="sale year"))काम किया
अरनौद ए

3

बस सूची में जोड़ने के लिए (यहां अन्य विकल्प मेरे लिए काम नहीं करते थे), आप gbplot के लिए फ़ंक्शन update_labels का भी उपयोग कर सकते हैं:

p <- ggplot(df, aes(x=rating, fill=cond)) + 
           geom_density(alpha=.3) + 
           xlab("NEW RATING TITLE") + 
           ylab("NEW DENSITY TITLE")
update_labels(p, list(colour="MY NEW LEGEND TITLE")

यह आपको अलग-अलग लाइनों के साथ x- और y- अक्ष लेबल बदलने की अनुमति देगा:

update_labels(p, list(x="NEW X LABEL",y="NEW Y LABEL")

2

मैंने देखा कि ggboxplot () के लिए Legend.title को बदलने / निर्दिष्ट करने के दो तरीके हैं:

library(ggpubr)

bxp.defaultLegend <- ggboxplot(ToothGrowth, x = "dose", y = "len",
                               color = "dose", palette = "jco")

# Solution 1, setup legend.title directly in ggboxplot()
bxp.legend <- ggboxplot(ToothGrowth, x = "dose", y = "len",
                 color = "dose", palette = "jco", legend.title="Dose (mg)")

# Solution 2: Change legend title and appearnace in ggboxplot() using labs() and theme() option:
plot1 <-  bxp.defaultLegend + labs(color = "Dose (mg)") +
  theme(legend.title = element_text(color = "blue", size = 10), legend.text = element_text(color = "red"))

ggarrange(list(bxp.legend, bxp.defaultLegend, plot1), nrow = 1, ncol = 3,  common.legend = TRUE)

GitHub से उदाहरण के आधार पर कोड को संशोधित किया गया है


1

मैं अपने ggplot में एक facet_wrap का उपयोग कर रहा हूं और मेरे द्वारा अरनौडा के समाधान को छोड़कर किसी भी सुझाए गए समाधान में से किसी ने भी काम नहीं किया है:

qplot() + guides(color=guide_legend(title="sale year")) 

1

बहुत से लोग बहुत समय बदलने वाले लेबल, किंवदंती लेबल, शीर्षक और अक्ष के नाम खर्च करते हैं क्योंकि वे नहीं जानते कि आर में तालिकाओं को लोड करना संभव है जिसमें रिक्त स्थान शामिल हैं " "। हालाँकि आप समय बचाने के लिए या अपने कोड के आकार को कम करने के लिए ऐसा कर सकते हैं, विभाजक निर्दिष्ट करके जब आप एक तालिका लोड करते हैं, उदाहरण के लिए टैब के साथ सीमांकित (या डिफ़ॉल्ट या एकल स्थान से कोई अन्य विभाजक):

read.table(sep = '\t')

या सीएसवी प्रारूप के डिफ़ॉल्ट लोडिंग मापदंडों का उपयोग करके:

read.csv()

इसका मतलब है कि आप "NEW LEGEND TITLE"हर प्लॉट में एक नया लीजेंड टाइटल निर्दिष्ट करने से बचने के लिए सीधे अपनी मूल डेटा फ़ाइल में कॉलम नाम (हेडर) के रूप में नाम रख सकते हैं ।


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