2013-04-05 11 views
8

私はggplot2を使用することを学んでおり、base::plotの結果を再現する最小のggplot2コードを探しています。私はいくつかのことを試しましたが、それらはすべてひどく長くなってしまったので、最小の式を探していて、はx軸の日付を理想的にはにしたいと考えています(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のラベルを持つようなデータをプロットするために必要とするためには、あなたが x=1:5でプロットし、新しい data.frame labelsを設定するために scale_x_discreteを使用することができ、日付です。 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

おかげで、それは 'plot'のに比べてかなり長いです。 'ggplot'はおそらく90度回転した' x'軸に日付を追加することで少なくともそれ自体を利用できますか? :) – eddi

+0

引用: "理想的には、x軸上の日付を持っていたいです(下のプロットにはありません)。 – eddi

+0

日付ごとに1つ以上のvalがありますが、編集が完了していない場合には、投稿を編集して修正を試みました。 – eddi

1

数年後、私がやってに落ち着いてきました:

ggplot(df, aes(as.Date(as.character(date), '%Y%m%d'), cumsum(val))) + geom_line() 
関連する問題