叠加图并保持2 X轴

时间:2012-02-17 17:12:38

标签: r time-series

是否有一种“自动”方式在第一个下方添加第二个x轴?

我的数据与此类似:

A1=data.frame(dates=seq(as.Date("2000/1/1"), by="day", length.out=1080),obs=runif(1080,min=-10,max=15))
A2=data.frame(dates=seq(as.Date("2010/1/1"), by="day", length.out=1080),obs=runif(1080,min=-8,max=50))

par(new=T)
plot(A1,ylim=range(min(A1[,2],A2[,2]):max(A1[,2],A2[,2])))
par(new=F)
plot(A2,ylim=range(min(A1[,2],A2[,2]):max(A1[,2],A2[,2])))

我找到的唯一解决方案是手动制作。我有多个相同长度的时间序列,我想覆盖观察结果并保持x轴如下:

_________________________________________________
  |        |       |        |        |        |
2000     2001     2002     2003     2004     2005  
2010     2011     2012     2013     2014     2015
2020     2021     2022     2023     2024     2025
(...)

每个时间序列都有不同的颜色。

1 个答案:

答案 0 :(得分:1)

自动?不是我所知道的。

但我确实知道你可以(通过一些努力)手工完成这项工作。例如:

par(mar = c(10,4,4,2) + 0.1)
plot(1:3,1:3,axes = FALSE,xlab = "")
axis(1,1:3,labels = FALSE)
mtext(c('2000','2001','2002'),side = 1,line = 1,at = 1:3,col = "red")
mtext(c('2010','2011','2012'),side = 1,line = 2,at = 1:3,col = "blue")
mtext(c('2000','2001','2002'),side = 1,line = 3,at = 1:3,col = "red")
mtext(c('2010','2011','2012'),side = 1,line = 4,at = 1:3,col = "blue")
axis(2)

enter image description here

我通过设置mar将底部边距中的行数增加到10,以演示如何确保每行轴标签有足够的空间。

然后绘制,省略轴,仅使用刻度线添加x轴,然后使用mtext绘制每行文本标签。

如果您不需要每一行都是不同的颜色,则可以通过调用axis来执行此操作,其中labels参数由c("2000\n2010\n2020","2001\n2011\n2021","2002\n2012\n2022")之类的向量组成然后摆弄padj以使它们正确居中。