一个非常新的问题,但是说我有这样的数据:
test_data <-
data.frame(
var0 = 100 + c(0, cumsum(runif(49, -20, 20))),
var1 = 150 + c(0, cumsum(runif(49, -10, 10))),
date = seq(as.Date("2002-01-01"), by="1 month", length.out=100)
)
如何在同一图表上绘制时间序列 var0
和 var1
,在x轴上使用 date
,使用 ggplot2
?如果你制作 var0
和 var1
不同的颜色,可以包括一个传奇!
我确信这很简单,但我找不到任何例子 .
4 回答
一般方法是将数据转换为长格式(使用包
reshape
或reshape2
中的melt()
)或tidyr
包中的gather()
:使用您的数据:
我创建了一个堆叠版本,这是
ggplot()
想要使用的:在这种情况下,生成
stacked
非常简单,因为我们只需要进行一些操作,但如果你有一个更复杂的实际数据集来操作,reshape()
和reshape
和reshape2
可能会很有用 .一旦数据处于这种堆叠形式,它只需要一个简单的
ggplot()
调用来生成你想要的所有额外的绘图(更高级绘图包如lattice
和ggplot2
非常有用的一个原因):我会留给你整理轴标签,图例 Headers 等 .
HTH
对于少量变量,您可以自己手动构建绘图:
对于ggplot2,您需要数据为"tall"格式而不是"wide" . "wide"表示每行观察一次,每个变量作为不同的列(就像你现在一样) . 您需要将其转换为"tall"格式,其中有一列告诉您变量的名称,另一列告诉您变量的值 . 从宽到高的过程通常称为"melting" . 您可以使用
tidyr::gather
来融化数据框:只是为了清楚
ggplot
ggplot
在通过gather
进行管道输送后正在消耗,如下所示: