2012-02-17 51 views
1

是否有一种“自动”方式在第一个x轴的下方添加第二个x轴?覆盖图并保留2个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

自动?从来没听说过。

但我知道你可以(用一些努力)手工做这件事。例如:

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绘制每行文本标签。

如果您并不需要每一行是一个不同的颜色,你可以用一个电话,其中labels参数由像c("2000\n2010\n2020","2001\n2011\n2021","2002\n2012\n2022")的载体,然后用padj摆弄,让他们正确地集中做这axis