मान लीजिए मैं ggplot में निम्नलिखित साजिश है:ggplot में रंग, रेखा शैली और आकार किंवदंतियों विलय करने के लिए कैसे
x <- seq(0, 10, by = 0.2)
y1 <- sin(x)
y2 <- cos(x)
y3 <- cos(x + pi/4)
y4 <- sin(x + pi/4)
df1 <- data.frame(x, y = y1, Type = as.factor("sin"), Method = as.factor("method1"))
df2 <- data.frame(x, y = y2, Type = as.factor("cos"), Method = as.factor("method1"))
df3 <- data.frame(x, y = y3, Type = as.factor("cos"), Method = as.factor("method2"))
df4 <- data.frame(x, y = y4, Type = as.factor("sin"), Method = as.factor("method2"))
df.merged <- rbind(df1, df2, df3, df4)
ggplot(df.merged, aes(x, y, colour = interaction(Type, Method), linetype = Method, shape = Type)) + geom_line() + geom_point()
मैं करूंगा:
यह नीचे दिए गए कोड का उपयोग कर उत्पन्न की गई जैसे कि केवल एक किंवदंती है जो आकार, रंग और रेखा प्रकारों को सही ढंग से प्रदर्शित करती है (बातचीत (प्रकार, विधि) किंवदंतियों को मैं जो चाहूं उसके सबसे नज़दीक है, लेकिन इसमें सही आकार/रेखा प्रकार नहीं हैं)।
मुझे पता है कि अगर मैं scale_xxx_manual का उपयोग करता हूं और मैं सभी किंवदंतियों के लिए एक ही लेबल निर्दिष्ट करता हूं तो उन्हें विलय कर दिया जाएगा, लेकिन मैं लेबल को मैन्युअल रूप से सेट नहीं करना चाहता हूं: यदि नए तरीके या प्रकार हैं, तो मैं नहीं करता मेरे कोड को संशोधित करना नहीं चाहता: एक सामान्य कुछ चाहते हैं।
संपादित
नीचे दिए गए उत्तर में बताया, वहाँ कई तरीके काम इस विशेष मामले में करवाने के लिए कर रहे हैं। सभी प्रस्तावित समाधानों को scale_xxx_manual function
एस या guides
फ़ंक्शन के साथ या तो लीजेंड लाइन प्रकारों और आकारों को मैन्युअल रूप से सेट करने की आवश्यकता होती है।
हालांकि, प्रस्तावित समाधान अभी भी सामान्य मामले में काम नहीं करते हैं: उदाहरण के लिए, यदि मैं एक नए "विधि 3" विधि के साथ डेटा सेट में एक नया डेटा फ्रेम जोड़ता हूं, तो यह अब काम नहीं करता है
y5 <- sin(x - pi/4)
df5 <- data.frame(x, y = y5, Type = as.factor("sin"), Method = as.factor("method3"))
df.merged <- rbind(df1, df2, df3, df4, df5)
override.shape <- c(16, 17, 16, 17, 16)
override.linetype <- c(1, 1, 3, 3, 4)
g <- ggplot(df.merged, aes(x, y, colour = interaction(Type, Method), linetype = Method, shape = Type)) + geom_line() + geom_point()
g <- g + guides(colour = guide_legend(override.aes = list(shape = override.shape, linetype = override.linetype)))
g <- g + scale_shape(guide = FALSE)
g <- g + scale_linetype(guide = FALSE)
print(g)
यह देता है::
अब सवाल है: कैसे स्वचालित रूप से override.shape
और override.linetype
वैक्टर उत्पन्न करने के लिए मैन्युअल रूप से नए कथा आकृति और लाइन प्रकार जोड़ने?
ध्यान दें कि वेक्टर आकार 5 है, क्योंकि हम, 5 घटता है, जबकि interaction(Type, Method)
कारक आकार 6 (मैं क्योंकि/method3 संयोजन के लिए डेटा नहीं है)
आपका रंग स्केल संयुक्त आकार और लिनटाइप स्केल के लिए अनावश्यक है। आपको इनमें से केवल एक का उपयोग करना चाहिए। – Roland
हां, इसकी अनावश्यक। सबसे पहले, मेरे पास विधि में मैप किए गए टाइप और लिनटाइप के लिए मैप किए गए रंग थे। लेकिन फिर, जब वक्र एक दूसरे के बहुत करीब थे, तो उन्हें अलग करना मुश्किल था। इस प्रकार अनावश्यकता – Ben
अनावश्यक आकार/रंग समूह परिभाषाओं के लिए अक्सर उपयुक्त होता है। कई वैज्ञानिक प्रकाशनों में, रंग समूहों को अलग करने का सबसे अधिक प्रभावशाली तरीका है, लेकिन आप यह भी जानते हैं कि पाठकों का एक बड़ा हिस्सा पेपर की काले और सफेद प्रतियां प्रिंट करेगा, और इसलिए आप एक दृश्य क्यू भी शामिल करना चाहते हैं जो ' रंग पर निर्भर नहीं है। – neuropsych