2015-02-17 14 views
6

के लिए ggplot बार चार्ट मैं ggplot के बारे में हैडली विकम द्वारा पुस्तक पढ़ रहा हूं, लेकिन मुझे बार चार्ट में समय के साथ कुछ वजन प्लॉट करने में परेशानी है। यहां नमूना डेटा है:समय श्रृंखला

dates <- c("20040101","20050101","20060101") 
dates.f <- strptime(dates,format="%Y%m%d") 

m <- rbind(c(0.2,0.5,0.15,0.1,0.05),c(0.5,0.1,0.1,0.2,0.1),c(0.2,0.2,0.2,0.2,0.2)) 
m <- cbind(dates.f,as.data.frame(m)) 

यह डेटा.फ्रेम पहले कॉलम में तारीखों और प्रत्येक पंक्ति के समान वजन में है। मैं "भरें" तर्क का उपयोग करके बार चार्ट में प्रत्येक वर्ष के लिए वजन प्लॉट करना चाहता हूं।

मैं का उपयोग कर सलाखों के रूप में वजन साजिश कर सकती हूं:

p <- ggplot(m,aes(dates.f)) 
p+geom_bar() 

बहरहाल, यह नहीं है कि मैं वास्तव में क्या चाहते हैं। मैं प्रत्येक बार प्रत्येक वजन के योगदान में देखना चाहता हूं। इसके अलावा, मुझे समझ में नहीं आता कि मेरे पास एक्स-अक्ष पर अजीब प्रारूप क्यों है, यानी "2004-07" और "2005-07" क्यों प्रदर्शित हुआ।

ggplot2 एक लंबे प्रारूप में डेटा की आवश्यकता है:

मदद

उत्तर

3

इस आशा के लिए धन्यवाद आप के लिए क्या देख रहे है।

require(reshape2) 
m_molten <- melt(m, "dates.f") 

ही साजिश से

ggplot(m_molten, aes(x=dates.f, y=value, fill=variable)) + 
    geom_bar(stat="identity") 

enter image description here

किया जाता है आप geom_bar को position="dodge" जोड़ सकते हैं आप तो कंधे से कंधा मिलाकर चाहते हैं।

संपादित

यदि आप चाहते हैं वार्षिक टूट जाता है केवल: तारीख को m_molten$dates.f परिवर्तित।

require(scales) 
m_molten$dates.f <- as.Date(m_molten$dates.f) 

ggplot(m_molten, aes(x=dates.f, y=value, fill=variable)) + 
    geom_bar(stat="identity") + 
    scale_x_date(labels = date_format("%y"), breaks = date_breaks("year")) 

पी.एस .: साफ डेटा की हैडली के दर्शन के लिए http://vita.had.co.nz/papers/tidy-data.pdf देखें।

+0

बिल्कुल! बहुत धन्यवाद! – math

+0

शायद एक छोटा सवाल: मैं लेबल को 'scale_x_date (lables = date_format ("% y") के माध्यम से बदलना चाहता था) '। यह एक त्रुटि देता है कि यह फ़ंक्शन date_format नहीं ढूंढ सकता है। मैं बस 04, 05,06 कैसे प्रदर्शित कर सकता हूं? – math

+0

उपरोक्त संपादन देखें। – Rentrop

1

आपको जिस प्लॉट की आवश्यकता है, उसे बनाने के लिए, आपको अपने डेटा को "चौड़े" से "लंबा" में दोबारा बदलना होगा। ऐसा करने के कई तरीके हैं, जिसमें बेस आर (reshape2 और tidyr) में reshape() फ़ंक्शन शामिल है।

tidyr पैकेज में आपके पास डेटा दोबारा बदलने के लिए दो कार्य हैं, gather() और spread()

फ़ंक्शन gather() व्यापक से लंबा तक बदलता है। इस मामले में, आपको अपने कॉलम V1:V5 एकत्र करना होगा।

इस प्रयास करें:

library("tidyr") 

tidy_m <- gather(m, var, value, V1:V5) 

ggplot(tidy_m,aes(x = dates.f, y=value, fill=var)) + 
    geom_bar(stat="identity") 

enter image description here

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