私はggplot2
の使い方を学んでおり、以下のggplot2
の結果を再現する最小のbase::plot
コードを探しています。私はいくつかのことを試しましたが、それらはすべて恐ろしく長くなってしまったので、最小の式を探しています理想的にはx軸に日付を入れたい(そこにはありません以下のplot
にあります)。
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")
これを試して:
_ggplot(df, aes(x=1:5, y=cumsum(val))) + geom_line() + geom_point()
_
不要な場合は、geom_point()
を削除してください。
編集:データをそのままxラベルでプロットする必要があるため、_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")
_
「日付」には複数のval
があると言うので、たとえばplyr
を使用して最初にそれらを集約できます。
_require(plyr)
dd <- ddply(df, .(date), summarise, val = sum(val))
_
次に、_x = 1:5
_をx = seq_len(nrow(dd))
に置き換えることにより、同じコマンドを続行できます。
数年後、私は次のことを行うことに決めました。
ggplot(df, aes(as.Date(as.character(date), '%Y%m%d'), cumsum(val))) + geom_line()
Jan Boyer この問題のより簡潔な解決策を この質問 で見つけたようです。これを少し短くして Prradep の回答と組み合わせました。 =、(うまくいけば)最新の答えを提供するために:
ggplot(data = df,
aes(x=date)) +
geom_col(aes(y=value)) +
geom_line(aes(x = date, y = cumsum((value))/5, group = 1), inherit.aes = FALSE) +
ylab("Value") +
theme(axis.text.x = element_text(angle=90, hjust = 1))
date
は日付形式ではなく、character
であり、value
は、上記の回答で Prradep によって提案されているように、すでにグループ化されていることに注意してください。