【问题标题】:Plotting multiple time-series in ggplot在 ggplot 中绘制多个时间序列
【发布时间】:2012-10-30 17:07:08
【问题描述】:

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

我想创建一个时间序列图,其中随着时间的推移,每 10 个变量以不同的颜色绘制在同一张图上。值应该在 Y 轴上,日期在 X 轴上。

Click Here 用于数据集 csv

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

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

下面是代码输出的样子:

谁能指出我正确的方向?我无法在以前的帖子中找到任何内容。

问题已解决,见下文。

还有一点我想知道的:

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

【问题讨论】:

  • 您可能需要为最后的 cmets 单独提出一个问题。有几种方法可以实现这一点。一种方法是在variable 中设置另一个级别,例如称为meana_f,然后您将使用与当前绘图中的af 相同的逻辑来绘制它。
  • 您能否打印初始 .csv 文件的 head(),因为您提供的链接显示文件未找到?
  • 能否提供原始数据集?
  • 数据集丢失

标签: r ggplot2


【解决方案1】:

如果您的数据被称为 df 类似这样:

library(ggplot2)
library(reshape2)
meltdf <- melt(df,id="Year")
ggplot(meltdf,aes(x=Year,y=value,colour=variable,group=variable)) + geom_line()

所以基本上在我的代码中,当我使用aes() 时,我告诉它x 轴是Year,y 轴是value,然后colour/groupingvariable .

melt() 函数用于以ggplot2 想要的格式获取数据。 year 等的一大列,然后当您告诉它为您的 variable 绘制单独的行时,您可以有效地将其拆分。

【讨论】:

  • 由于某种原因,我收到以下错误: eval 中的错误(expr,envir,enclos):找不到对象'Year',在此之前,当我添加了它说的 melt() 命令时:> meltdf =melt(co) 用作 id 变量
  • 还有没有办法让线条看起来更“漂亮”?这些突然的跳跃看起来有点像置信区间......可以让它更连续一点吗?
  • 跳跃是你的数据..你可以在组内取平均值,即cast()melt()之后,绘制数据的平滑函数或在x轴上粗化年份比例但是这完全取决于您以及您要实现的目标
  • 我在你应该使用meltdf&lt;-melt(df,id="Year")的代码中遗漏了一些东西。我也在上面更正了这个。
  • 或者您可以使用geom_smooth,可能与geom_point 结合使用以获得更平滑的图形。
猜你喜欢
  • 1970-01-01
  • 2020-03-30
  • 1970-01-01
  • 2013-11-24
  • 1970-01-01
  • 2021-02-28
  • 2023-03-17
  • 2023-02-19
  • 2021-11-08
相关资源
最近更新 更多