【问题标题】:How to plot a time-series table containing several observation objects如何绘制包含多个观察对象的时间序列表
【发布时间】:2015-05-19 16:40:03
【问题描述】:

首先,我是 R 的新手。不幸的是,我找不到与我的问题相关的现有标签。我有几个以下结构的data.frames:

线路:City1、City2、City3、(...)

列:Migration-Flow 2004、Migration-Flow 2005、Migration-Flow 2006 (...)

City    Migration-Flow 2004    Migration-Flow 2005    Migration-Flow 2006
----    -------------------    -------------------    -------------------
City1   5920                   1339                   -3394
City2   3001                   4129                   4430
...

我的线条(不是我的专栏)代表每个城市的时间序列。例如,data.frame[,2] 表示 City1 在 2004 年到 2010 年之间的时间序列。

我想要做的是,在一个图表中绘制每条线(2004 年到 2010 年每个城市的迁移流量)以便比较它们。有没有办法做到这一点?

【问题讨论】:

  • 我已经编辑了您的问题以表达您的数据是什么样的。请确认我的编辑正确地表示了它。

标签: r time-series timeserieschart


【解决方案1】:

蛮力不优雅的方法(但为什么不呢,它很短):

# Generate artificial data
flow = matrix(runif(100,1000,2000),nrow=10)
d = data.frame(City=paste0("City",1:10),flow)

# Brute force
plot(unlist(d[1,-1]), type = "l")
for (i in 2:nrow(d)) lines(unlist(d[i,-1]),col=i)

请注意,在您的示例中 data.frame[2,] 是针对城市 1 的。

【讨论】:

    【解决方案2】:

    使用plot 命令,您可以从数据的第一行生成图。然后,使用lines,您可以在绘图中为每个新行添加一个新行。一个简单的for 循环将使这个过程相对简单。下面是一个简单的例子:

    set.seed(519310)
    testdata <- data.frame(City=c("Trenton","New Dehli","Kabul","New York","Santa Fe","Berlin","Oslo"),
                           Migration.2004=sample(x = -1000:1000,size = 7,replace = TRUE),
                           Migration.2005=sample(x = -1000:1000,size = 7,replace = TRUE),
                           Migration.2006=sample(x = -1000:1000,size = 7,replace = TRUE),
                           Migration.2007=sample(x = -1000:1000,size = 7,replace = TRUE),
                           Migration.2008=sample(x = -1000:1000,size = 7,replace = TRUE),
                           Migration.2009=sample(x = -1000:1000,size = 7,replace = TRUE),
                           Migration.2010=sample(x = -1000:1000,size = 7,replace = TRUE))
    
    plot(x = 1:(ncol(testdata)-1),
         y = testdata[1,2:8],
         type = "l",
         ylim = c(-1000,1000))
    
    colors <- c("red","blue","green","yellow","purple","orange","dark blue")
    
    for(x in 2:nrow(testdata)) {
    
        lines(x = 1:(ncol(testdata)-1),y = testdata[x,2:8],type = "l",col = colors[x])
    }
    

    这会产生以下输出:

    使用legend 命令可以生成图例,使用colorRamp 可以让颜色根据行数动态变化。 plotxlab 的参数将允许您使 x 轴标签更复杂。虽然此代码很简单并且依赖于特定数量的行,但您可以轻松地将其概括为处理更多不同的数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多