2013-04-05 6 views
8

का उपयोग कर संचयी साजिश मैं ggplot2 का उपयोग करना सीख रहा हूं और सबसे कम ggplot2 कोड ढूंढ रहा हूं जो नीचे base::plot परिणाम पुन: उत्पन्न करता है। मैंने कुछ चीजों की कोशिश की है और वे सब बहुत लंबे समय तक समाप्त हो गए हैं, इसलिए मैं सबसे छोटी अभिव्यक्ति की तलाश में हूं और आदर्श रूप से x-axis (जो plot में नहीं हैं) पर तारीखें रखना चाहते हैं। ।ggplot2

df = data.frame(date = c(20121201, 20121220, 20130101, 20130115, 20130201), 
       val = c(10, 5, 8, 20, 4)) 
plot(cumsum(rowsum(df$val, df$date)), type = "l") 

उत्तर

22

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

ggplot(df, aes(x=1:5, y=cumsum(val))) + geom_line() + geom_point() 

enter image description here

बस geom_point() को दूर करता है, तो आप इसे नहीं करना चाहती।

संपादित करें: जब से तुम एक्स लेबल के साथ इस तरह के रूप डेटा प्लॉट करने की आवश्यकता होती है, तिथियां दी गई हैं आप x=1:5 साथ साजिश और scale_x_discrete का उपयोग labels एक नया data.frame सेट करने के लिए कर सकते हैं। df ले रहा है:

ggplot(data = df, aes(x = 1:5, y = cumsum(val))) + geom_line() + 
     geom_point() + theme(axis.text.x = element_text(angle=90, hjust = 1)) + 
     scale_x_discrete(labels = df$date) + xlab("Date") 

enter image description here

जब से तुम कहते हैं कि तुम "तिथि" के लिए 1 से अधिक val होगा, तो आप उन्हें पहले plyr का उपयोग कर उदाहरण के लिए समेकित कर सकते हैं।

require(plyr) 
dd <- ddply(df, .(date), summarise, val = sum(val)) 

तो फिर तुम x = seq_len(nrow(dd)) साथ x = 1:5 की जगह एक ही आदेश के साथ आगे बढ़ सकते हैं।

+0

धन्यवाद, यह बहुत लंबे समय तक की तुलना में है। 'Xg अक्ष 'पर तारीखों को जोड़कर कम से कम' ggplot' को रिडीम कर सकते हैं, शायद 90 डिग्री से घूर्णन हो सकता है? :) – eddi

+0

उद्धरण: "और आदर्श रूप से एक्स अक्ष पर तिथियां रखना चाहेंगे (जो नीचे साजिश में नहीं हैं)।" – eddi

+0

मैंने इस पोस्ट को ठीक करने के लिए अपनी पोस्ट को संपादित करने का भी प्रयास किया, जहां प्रति दिन 1 से अधिक वैल हैं, लेकिन संपादन नहीं हुआ है। – eddi

1

कुछ साल बाद, मैं क्या कर रही पर बसे है: `plot` को

ggplot(df, aes(as.Date(as.character(date), '%Y%m%d'), cumsum(val))) + geom_line()