2015-05-19 58 views
0

首先,我是R中的一个新手。不幸的是,我找不到与我的问题相关的现有标记。我有以下结构的几个data.frames:如何绘制包含多个观察对象的时间序列表

线:City1,位于City2,请分享帮助,(...)

列:迁移,2004年流动,迁移,2005年流动,迁移,2006年流动(。 ..)

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

我的行(不是我的列)表示每个城市的时间序列。例如,data.frame [,2]表示2004年至2010年City1的时间序列。

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

+0

我编辑了你的问题来表达你的数据看起来像。请确认我的编辑已正确表示。 – TARehman

回答

0

蛮力非巧妙的方法(但为什么不呢,它的简称):

# 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.

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轴标签更加复杂。虽然这段代码很简单并且依赖于特定数量的行,但您可以轻松将其推广到更多不同的数据。

相关问题