2012-07-13 19 views
5

के लिए एकाधिक रेखाएं मैं ggplot2 में एकल "कक्षा" के हिस्से के रूप में कई पंक्तियों को प्लॉट करने की कोशिश कर रहा हूं। मैं निम्नलिखित की तरह कुछ प्लॉट कर सकते हैं:ggplot: एक रंग/वर्ग

image with 5 classes

लेकिन मेरी समस्या यह है कि मैं एक ही वर्ग के रूप में n1, एन 2, और n3 दिखाना चाहते हैं (कथा में एक ही नाम के साथ प्रत्येक के लिए ग्रे पतली लाइनों) ।

मेरी समस्या यह है कि यदि मैं उन्हें समूहित करने के लिए डेटा फ्रेम में एक नया कारक बनाता हूं, तो मैं n1 (ऊपरी दाएं) के अंत से एन 2 (निचले बाएं) की शुरुआत में अतिरिक्त कनेक्शन ड्राइंग करता हूं जो कि मेरी ग्राफ भर में एक विकर्ण जोड़ता है:

graph with one class

यही तो मैं चाहता हूँ के करीब है, लेकिन अतिरिक्त विकर्ण रेखा है। यदि यह मायने रखता है, तो मैं इन पंक्तियों का उत्पादन करने के लिए परिणामस्वरूप performance ऑब्जेक्ट से एक्स और वाई अंक निकालने के बाद आरओसीआर का उपयोग करके कंप्यूटिंग कर रहा हूं।

+1

यदि आप न्यूनतम प्रतिलिपि उदाहरण (डेटा + कोड) प्रदान करते हैं तो यह उत्तर देना बहुत आसान होगा। – joran

+0

मैं सहमत हूं। दुर्भाग्यवश, मुझे डर था कि इस तरह के एक उदाहरण को पुन: पेश करने के लिए आवश्यक कोड वास्तविक प्रश्न से अधिक जगह लेगा। मेरी आशा यह है कि कोई व्यक्ति सिद्धांत को पहचान सकता है और इससे पहले समस्या का समाधान देखा है। –

+1

मुझे पुनरुत्पादित उदाहरणों के बिना प्रश्नों को समझ में नहीं आता है, लेकिन मुझे लगता है कि दूसरी साजिश में, आप 'प्लस एनेस्थेटिक' और रंग के लिए नया कारक निर्दिष्ट करने के लिए पहली साजिश में समान वैरिएबल का उपयोग कर सकते हैं। – baptiste

उत्तर

1

यहाँ एक ही रास्ता है, लेकिन मुझे नहीं लगता कि आप यह बहुत ज्यादा पसंद करेंगे:

d1 <- data.frame(x = 1:10, 
       y = rep(1:2,each = 5), 
       grp = factor(rep(letters[1:2],each = 5),levels = letters[1:3])) 
d1 <- rbind(d1,data.frame(x = 1:2,y = c(NA,NA),grp = c('c','c'))) 

d2 <- data.frame(x = 1:15, 
       y = rep(3:5,each = 5), 
       grp = rep(1:3,each = 5)) 

ggplot() + 
    geom_line(data = d1,aes(x = x,y = y,group = grp,colour = grp)) + 
    geom_line(data = d2,aes(x = x,y = y,group = grp),colour = "blue") 

enter image description here

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

उपरोक्त विधि अधिक आम तौर पर काम करेगी, लेकिन जैसा कि आप देख सकते हैं कम अजीब नहीं है। अगर कुछ भी यह असुविधाजनक है।

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

+0

धन्यवाद! मैं यह स्वीकार करने वाला पहला व्यक्ति होगा कि मेरा समाधान सार्वभौमिक रूप से अपनाया नहीं जाना चाहिए। यह एक अच्छा समाधान है - ggplot2 में परतों के बारे में कुछ नया सिखाया - लेकिन मैं मानता हूं कि यह आदर्श से कम है। मुझे लगता है कि मैं इस परिदृश्य के लिए शायद 'लाइन' के साथ बेहतर हूं, लेकिन मैं पहले से ही ggplot2 का उपयोग कर अपने बाकी ग्राफिक्स को स्वरूपित कर दूंगा, इसलिए मैं इस बिंदु पर सुविधा पर स्थिरता के लिए जा रहा हूं। एक बार फिर धन्यवाद। –

0

मेरे पास rbind 'आरओसीआर performance ऑब्जेक्ट से आइटम को इस आलेख को साजिश करने का प्रयास करते समय सीधे डेटा.फ्रेम में आइटम था। मुझे एहसास है कि मैं डेटा के मध्यम वर्ग के क्रम को उलट कर शीर्ष-दाएं से निचले बाएं से यात्रा काट सकता हूं। यानी

n1 <- getPerformance(test1) 
n2 <- getPerformance(test2) 
n3 <- getPerformance(test3) 

तीन डेटा फ्रेम बनाने की तरह

type x   y 
1 n1 0 0.000000000 
2 n1 0 0.003448276 
3 n1 0 0.006896552 
4 n1 0 0.010344828 
5 n1 0 0.013793103 
6 n1 0 0.017241379 
... 
26565 n1 0.9999619 1 
26566 n1 1.0000000 1 

समस्या यहाँ देख यह है कि जब मैं n2 को n1 rbind, मैं n2 की बात करने के लिए n1 के बिंदु (1,1) जोड़ने होगी (0,0) - विकर्ण रेखा बनाते हैं।

मेरे मामले में, एक (मैला) समाधान केवल हर दूसरी लाइन के क्रम को उलटना था ताकि कोई विकर्ण रेखा न हो।

n2_rev <- n2[nrow(n2):1,] 
ns <- rbind(n1,n2_rev,n3) 

तो अब लाइन शुरू करने के बजाय वापस और आगे चला जाता है और लगातार एक ही स्थिति को समाप्त हुई, निम्नलिखित ग्राफ बनाने:

desired graph

बहरहाल, मैं वहाँ एक और अधिक सार्वभौमिक मान इसे संभालने का तरीका। क्या ggplot2 ग्राफ में लाइन जोड़ने के लिए कोई अच्छा तरीका है जैसे कि बेस आर के लिए lines() फ़ंक्शन?