如何绘制包含多个观察对象的时间序列表

时间:2015-05-19 16:40:03

标签: r time-series timeserieschart

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

行: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年的每个城市的迁移流量),以便比较它们。有没有办法做到这一点?

2 个答案:

答案 0 :(得分:0)

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

Disallow: /x*

请注意,在您的示例中,data.frame [2,]适用于City 1.

答案 1 :(得分:0)

使用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])
}

这会产生以下输出:

Plot Output

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