2013-06-17 10 views
17

एक ग्राफ़ में एकाधिक लाइनों को प्लॉट करने के लिए ggplot का उपयोग करने का प्रयास कर रहा है, लेकिन यह सुनिश्चित नहीं है कि मेरे डेटासेट के साथ ऐसा कैसे करें। सुनिश्चित नहीं हैं कि क्या मैं आंकड़ा संरचना बदलने के लिए या (स्थानांतरित?)एक ग्राफ में एकाधिक लाइनों को प्लॉट करें

डाटा इस तरह दिखता नहीं की जरूरत है:

Company 2011 2013 
Company1 300 350 
Company2 320 430 
Company3 310 420 

मैं भी कोशिश की यह स्थानांतरित:

Year Company1 Company2 Company3 
2011 300  320  310 
2013 350  430  420 

और इस के लिए मैं प्लॉट कर सकते हैं उपयोग मूल्यों में से 1;

ggplot(data=df, aes(x=Year, y=Company1)) + geom_line(colour="red") + geom_point(colour="red", size=4, shape=21, fill="white") 

लेकिन मुझे नहीं पता कि सभी कंपनियों को कैसे गठबंधन करना है क्योंकि मेरे पास समूह 'कंपनी' नहीं है। कोई सुझाव?

उत्तर

44

आप ggplot2 साथ इसका इस्तेमाल करने के लिए लंबे समय (यानी पिघला हुआ) प्रारूप में अपने डेटा को लाना चाहिए:

library("reshape2") 
mdf <- melt(mdf, id.vars="Company", value.name="value", variable.name="Year") 

और फिर आप समूह उन्हें aes(... , group = Company) उपयोग करने के लिए:

ggplot(data=mdf, aes(x=Year, y=value, group = Company, colour = Company)) + 
    geom_line() + 
    geom_point(size=4, shape=21, fill="white") 

enter image description here

+0

'df' ओवरराइट नहीं करेगी' आँकड़े :: df', 'R' जानता है जो एक आप संदर्भ द्वारा की चर्चा करते हुए कर रहे हैं। इसे स्वयं आज़माएं: 'df <- data.frame (ए = 1: 10); डीएफ (डीएफ $ ए, 1, 5) ' –

+1

@ सेनोरो यही मैंने पहले से ही कई बार पढ़ा है लेकिन आप सही हैं, यह अधिलेखित नहीं है। तो अपने आप को ध्यान दें: किसी और को अपनी जांच किए बिना जानकारी कभी न भेजें :-) मैंने अपना प्रश्न संपादित किया। – Beasterfield

+0

यह अभी भी एक अच्छा विचार हो सकता है कि 'df' को एक चर नाम के रूप में टालना - यदि आप इसे अक्सर उपयोग करते हैं (जैसे मैं अपनी सलाह के विरुद्ध करता हूं) तो कभी-कभी जब आप इसे परिभाषित करना भूल जाते हैं, तो आपको क्रिप्टिक त्रुटि मिलती है "त्रुटि डीएफ $ foo: प्रकार 'बंद' प्रकार का ऑब्जेक्ट सबकुछ योग्य नहीं है "त्रुटि: ऑब्जेक्ट 'डीएफ' नहीं मिला"। –

10

ggplot2 द्वारा आवश्यक अपमानजनक रूप से समेकित डेटा संरचनाओं का उपयोग करने के बजाय, आप देशी आर फ़ंक्शंस का उपयोग कर सकते हैं:

tab<-read.delim(text=" 
Company 2011 2013 
Company1 300 350 
Company2 320 430 
Company3 310 420 
",as.is=TRUE,sep=" ",row.names=1) 

tab<-t(tab) 

plot(tab[,1],type="b",ylim=c(min(tab),max(tab)),col="red",lty=1,ylab="Value",lwd=2,xlab="Year",xaxt="n") 
lines(tab[,2],type="b",col="black",lty=2,lwd=2) 
lines(tab[,3],type="b",col="blue",lty=3,lwd=2) 
grid() 
legend("topleft",legend=colnames(tab),lty=c(1,2,3),col=c("red","black","blue"),bg="white",lwd=2) 
axis(1,at=c(1:nrow(tab)),labels=rownames(tab)) 

R multiple lines plot

+2

थोड़ा मजबूत से अधिक 'अपमानजनक रूप से संकलित डेटा संरचना'। मुझे इस आकार में डेटा का उपयोग करने में बहुत मददगार लगता है – John

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