使用R在不同的面板中绘制多个时间序列

时间:2016-03-10 03:37:31

标签: r plot zoo timeserieschart

我试图绘制9个不同面板的9个站(A到I)的时间序列月平均温度数据。但我使用动物园来保持月份格式。我的简单数据集如下所示。

 +--------+------+------+------+------+
|  Time  |  A   |  B   |  C   |  D   |
+--------+------+------+------+------+
| Jan-84 | 28.2 | 28.2 | 27.5 | 18.4 |
| Feb-84 | 29.5 | 26.6 | 27.9 | 17.4 |
| Mar-84 | 30.7 | 30.3 | 30.1 | 19.5 |
| Apr-84 | 30.5 | 33.2 | 29.9 | 20.7 |
| May-84 | 33.2 | 30.1 | 30.2 | 21   |
| Jun-84 | 31.6 | 28.3 | 28.5 | 16.9 |
| Jul-84 | 31.5 | 28.6 | 27.7 | 16.8 |
| Aug-84 | 32.5 | 28.9 | 27.4 | 18.5 |
| Sep-84 | 34   | 28.1 | 29.4 | 18.3 |
| Oct-84 | 32.8 | 28.8 | 28.8 | 17.2 |
| Nov-84 | 28.9 | 31.6 | 29   | 17.8 |
| Dec-84 | 30.6 | 26.9 | 28.1 | 18.9 |
| Jan-85 | 31.8 | 28.6 | 29.3 | 18.2 |
| Feb-85 | 31.3 | 29.6 | 30.4 | 19.5 |
| Mar-85 | 32   | 31.1 | 31.4 | 19.7 |
+--------+------+------+------+------+

可以通过以下代码访问此数据集。

structure(list(Time = structure(c(6L, 4L, 10L, 1L, 12L, 9L, 8L, 
2L, 15L, 14L, 13L, 3L, 7L, 5L, 11L), .Label = c("Apr-84", "Aug-84", 
"Dec-84", "Feb-84", "Feb-85", "Jan-84", "Jan-85", "Jul-84", "Jun-84", 
"Mar-84", "Mar-85", "May-84", "Nov-84", "Oct-84", "Sep-84"), class =     "factor"), 
A = c(28.2, 29.5, 30.7, 30.5, 33.2, 31.6, 31.5, 32.5, 34, 
32.8, 28.9, 30.6, 31.8, 31.3, 32), B = c(28.2, 26.6, 30.3, 
33.2, 30.1, 28.3, 28.6, 28.9, 28.1, 28.8, 31.6, 26.9, 28.6, 
29.6, 31.1), C = c(27.5, 27.9, 30.1, 29.9, 30.2, 28.5, 27.7, 
27.4, 29.4, 28.8, 29, 28.1, 29.3, 30.4, 31.4), D = c(18.4, 
17.4, 19.5, 20.7, 21, 16.9, 16.8, 18.5, 18.3, 17.2, 17.8, 
18.9, 18.2, 19.5, 19.7)), .Names = c("Time", "A", "B", "C", 
"D"), class = "data.frame", row.names = c(NA, -15L))

我使用以下代码将数据获取到动物园结构,然后绘制。     库(动物园)

dat$Time <- as.yearmon(dat$Time,format="%b-%y")

然后使用以下代码进行绘图。

plot(dat, col=Rainbow)

我需要在X轴上标记年份,在Y轴上标记温度值。我找到了一些方法来绘制这个,但是这些例子在系列在单独的ts对象中并在组合后绘图时可用。但数据在数据框中可用作变量。我是R的新手并且感谢任何人都可以帮助我。感谢

2 个答案:

答案 0 :(得分:1)

如果你制作一个合适的zoo对象,我认为你会得到更好的结果。例如,使用原始dat

zz <- zoo(dat[-1], as.yearmon(dat$Time,format="%b-%y"))
plot(zz)

答案 1 :(得分:0)

使用完整的数据集,您可以传递X = dat [2:9]。对于9个绘图,使得par(mfrow = c(9,1))。

par(mar=c(1,1,1,1))
par(mfrow=c(4,1))
apply(X = dat[2:5],MARGIN = 2,FUN = plot,x=dat$Time,type="l",col="blue",xlab="Years",ylab="temperature")