2013-06-17 10 views
45

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

enter image description here

वर्तमान कोड इस तरह दिखता है:

a <-c("S1","S2","S3","S4","S5","S6","S7","S8","S9") #names 
b <-c(0.23,0.26,0.55,0.56,0.36,0.23,0.18,0.06,0.04) #mean t0 
c <-c(0.64,0.6,0.81,1.4,0.89,0.55,0.48,0.22,0.09) #mean t1 
d <-c(0.20,0.23,0.52,0.53,0.33,0.20,0.15,0.04,0.03) #SD low t0 
e <-c(0.26,0.29,0.58,.59,0.39,0.26,0.21,0.08,0.05) #SD high t0 
f <-c(0.67,0.63,0.86,1.44,0.93,0.59,0.51,0.25,0.10) #SD high t1 
g <-c(0.61,0.57,0.78,1.36,0.85,0.53,0.45,0.19,0.08) #SD low t1 
h <-c(0.41,0.34,0.26,0.84,0.53,0.32,0.30,0.16,0.05) #absolute change 

data <- data.frame(a,b,c,d,e,f,g,h) 

ggplot(data=data,aes(a)) + 
    geom_bar(stat="identity", aes(y=h),fill="#62c76b",colour="#333333")+ #green 
    geom_line(aes(y=b,group=1),size=1.0,colour="#f04546") + #red 
    geom_point(aes(y=b),size=3, colour="#f04546") +   #red 
    geom_errorbar(aes(ymin=d, ymax=e), colour="#f04546", width=0.1, size=.8) + 
    geom_line(aes(y=c,group=1),size=1.0,colour="#3591d1") + #blue 
    geom_point(aes(y=c),size=3, colour="#3591d1") +   #blue 
    geom_errorbar(aes(ymin=f, ymax=g), colour="#3591d1", width=0.1, size=.8) + 
    ylab("Symptom severity") + xlab("PHQ-9 symptoms") + 
    ylim(0,1.6) + 
    theme_bw() + 
    theme(axis.title.x = element_text(size = 15, vjust=-.2)) + 
    theme(axis.title.y = element_text(size = 15, vjust=0.3)) 
+3

बहुत उपयोगी - जहाँ मैं अगर प्रलेखन और ट्यूटोरियल नहीं से कोड होता है? – Torvon

उत्तर

63

आप (एईएस कथन में रंग) सौंदर्यशास्त्र के लिए गुण मैप करने के लिए एक पौराणिक कथा का उत्पादन करने की जरूरत है।

cols <- c("LINE1"="#f04546","LINE2"="#3591d1","BAR"="#62c76b") 
ggplot(data=data,aes(x=a)) + 
    geom_bar(stat="identity", aes(y=h, fill = "BAR"),colour="#333333")+ #green 
    geom_line(aes(y=b,group=1, colour="LINE1"),size=1.0) + #red 
    geom_point(aes(y=b, colour="LINE1"),size=3) +   #red 
    geom_errorbar(aes(ymin=d, ymax=e, colour="LINE1"), width=0.1, size=.8) + 
    geom_line(aes(y=c,group=1,colour="LINE2"),size=1.0) + #blue 
    geom_point(aes(y=c,colour="LINE2"),size=3) +   #blue 
    geom_errorbar(aes(ymin=f, ymax=g,colour="LINE2"), width=0.1, size=.8) + 
    scale_colour_manual(name="Error Bars",values=cols) + scale_fill_manual(name="Bar",values=cols) + 
    ylab("Symptom severity") + xlab("PHQ-9 symptoms") + 
    ylim(0,1.6) + 
    theme_bw() + 
    theme(axis.title.x = element_text(size = 15, vjust=-.2)) + 
    theme(axis.title.y = element_text(size = 15, vjust=0.3)) 

enter image description here

मुझे समझ में जहां रोलाण्ड से आ रही है, लेकिन जब से यह केवल 3 गुण है, और जटिलताओं superimposing बार और त्रुटि सलाखों से उत्पन्न होती हैं इस तरह यह विस्तृत प्रारूप में डेटा को छोड़ने के लिए उचित हो सकता है है। यह using geom_pointrange द्वारा जटिलता में थोड़ा कम हो सकता है।


, मूल में त्रुटि सलाखों कथा के लिए पृष्ठभूमि का रंग बदलने की साजिश विनिर्देश के + theme(legend.key = element_rect(fill = "white",colour = "white")) को जोड़ने के लिए। विभिन्न किंवदंतियों को मर्ज करने के लिए, आपको आम तौर पर सभी तत्वों के लिए एक सतत मैपिंग की आवश्यकता होती है, लेकिन वर्तमान में यह मेरे लिए एक काले रंग की पृष्ठभूमि का आर्टिफैक्ट तैयार कर रहा है। मैंने सोचा कि guide = guide_legend(fill = NULL,colour = NULL) पौराणिक कथाओं के लिए पृष्ठभूमि को शून्य पर सेट करेगा, लेकिन ऐसा नहीं हुआ। शायद एक और सवाल लायक है।

ggplot(data=data,aes(x=a)) + 
    geom_bar(stat="identity", aes(y=h,fill = "BAR", colour="BAR"))+ #green 
    geom_line(aes(y=b,group=1, colour="LINE1"),size=1.0) + #red 
    geom_point(aes(y=b, colour="LINE1", fill="LINE1"),size=3) +   #red 
    geom_errorbar(aes(ymin=d, ymax=e, colour="LINE1"), width=0.1, size=.8) + 
    geom_line(aes(y=c,group=1,colour="LINE2"),size=1.0) + #blue 
    geom_point(aes(y=c,colour="LINE2", fill="LINE2"),size=3) +   #blue 
    geom_errorbar(aes(ymin=f, ymax=g,colour="LINE2"), width=0.1, size=.8) + 
    scale_colour_manual(name="Error Bars",values=cols, guide = guide_legend(fill = NULL,colour = NULL)) + 
    scale_fill_manual(name="Bar",values=cols, guide="none") + 
    ylab("Symptom severity") + xlab("PHQ-9 symptoms") + 
    ylim(0,1.6) + 
    theme_bw() + 
    theme(axis.title.x = element_text(size = 15, vjust=-.2)) + 
    theme(axis.title.y = element_text(size = 15, vjust=0.3)) 

enter image description here


कथा में काले रंग की पृष्ठभूमि से छुटकारा पाने के लिए, आपको guide_legend को override.aes तर्क का उपयोग करने की आवश्यकता है। इसका उद्देश्य आपको किंवदंती के एक विशेष पहलू को निर्दिष्ट करने देना है जिसे सही तरीके से असाइन नहीं किया जा सकता है।

ggplot(data=data,aes(x=a)) + 
    geom_bar(stat="identity", aes(y=h,fill = "BAR", colour="BAR"))+ #green 
    geom_line(aes(y=b,group=1, colour="LINE1"),size=1.0) + #red 
    geom_point(aes(y=b, colour="LINE1", fill="LINE1"),size=3) +   #red 
    geom_errorbar(aes(ymin=d, ymax=e, colour="LINE1"), width=0.1, size=.8) + 
    geom_line(aes(y=c,group=1,colour="LINE2"),size=1.0) + #blue 
    geom_point(aes(y=c,colour="LINE2", fill="LINE2"),size=3) +   #blue 
    geom_errorbar(aes(ymin=f, ymax=g,colour="LINE2"), width=0.1, size=.8) + 
    scale_colour_manual(name="Error Bars",values=cols, 
         guide = guide_legend(override.aes=aes(fill=NA))) + 
    scale_fill_manual(name="Bar",values=cols, guide="none") + 
    ylab("Symptom severity") + xlab("PHQ-9 symptoms") + 
    ylim(0,1.6) + 
    theme_bw() + 
    theme(axis.title.x = element_text(size = 15, vjust=-.2)) + 
    theme(axis.title.y = element_text(size = 15, vjust=0.3)) 

enter image description here

+0

एंडी, बहुत बहुत धन्यवाद। (1) क्या 1 बार किंवदंती के साथ 2 लाइन "विलय" करने का कोई तरीका है? (2) क्या किंवदंती को मैन्युअल रूप से बदलने का कोई तरीका है? जैसे LINE1 और LINE2 के आस-पास ग्रे सीमा का रंग? मुझे ggplot2 दस्तावेज़ में कुछ भी नहीं मिला (जहां मेरा पूरा कोड है)। – Torvon

+0

@ टोरवोन, किंवदंती विलय करने के लिए आपको आम तौर पर प्रत्येक जियोम के लिए लगातार मैपिंग की आवश्यकता होती है। मैं एक उदाहरण के साथ अद्यतन करूंगा, लेकिन यह एक अजीब आर्टिफैक्ट उत्पन्न करता है (शायद क्योंकि लाइनों में इंटीरियर भर नहीं है)। यह देखने के लिए एक और सवाल लायक हो सकता है कि इसे आपकी पसंद में संशोधित किया जा सकता है या नहीं। मैं कहूंगा हालांकि मुझे नहीं लगता कि विभिन्न किंवदंतियों का एक अच्छा विचार है। यह दो किंवदंतियों आईएमओ के साथ बहुत सरल है। –

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