在ggplot中绘制多个时间序列

24

我有一个由10个变量组成的时间序列数据集。

我想创建一个时间序列图,将每个变量用不同颜色绘制在同一张图上,按时间排序。Y轴表示数值,X轴表示日期。

点击此处获取数据集csv文件。

这是我一直在使用(可能错误的)代码:

c.o<-read.csv(file="co.csv",head=TRUE)
ggplot(c.o, aes(Year, a, b, c, d, e,f))+geom_line()

以下是代码输出的结果:

有谁能指点我正确的方向吗?我在以前的讨论中找不到任何信息。

问题已解决,请看下面。

我还想知道一件事:

是否可以添加一个额外的线来表示所有变量随时间的平均值,并在该线下方和上方进行一些平滑以表示个体差异?


1
你可能需要另外提一个问题来解决你最后的评论。有几种方法可以实现这个目标。其中一种方法是在 variable 中再添加一个级别,例如称为 meana_f,然后使用与当前绘图中的 af 相同的逻辑来绘制它。 - user1317221_G
4
你能打印出初始CSV文件的head()吗?因为你提供的链接显示文件未找到。 - Nanami
1
请问您能提供原始数据集吗? - Eric Tobias
1
数据集丢失。 - baxx
1个回答

49
如果您的数据被称为df,类似这样:
library(ggplot2)
library(reshape2)
meltdf <- melt(df,id="Year")
ggplot(meltdf,aes(x=Year,y=value,colour=variable,group=variable)) + geom_line()

enter image description here

基本上,在我的代码中,当我使用aes()函数时,我告诉它x轴是Year,y轴是value,然后按variable进行colour/grouping

melt()函数的作用是将数据格式转换为ggplot2所需的格式。即将所有数据放在一个大列中(例如year等),然后在绘制时根据variable分开线条。


由于某种原因,我收到了以下错误:Error in eval(expr, envir, enclos) : object 'Year' not found。在此之前,当我添加melt()命令时,它显示:> meltdf=melt(c.o) 使用作为id变量。 - user1723765
跳转是你的数据.. 你可以在分组内计算年份的均值,即在 melt() 后使用 cast(),绘制数据的平滑函数或者粗化 x 轴上的年份刻度,但这完全取决于你想要实现的目标。 - user1317221_G
好的,但是为什么我会得到我之前评论中提到的错误? - user1723765
2
我在代码中漏掉了一些内容,你应该使用meltdf<-melt(df,id="Year")。我也已经在上面进行了更正。 - user1317221_G
2
或者您可以使用geom_smooth,可能与geom_point结合使用以获得更平滑的图形。 - Paul Hiemstra
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接