【问题标题】:overlay plots and keep 2 X axis叠加图并保持 2 X 轴
【发布时间】:2012-02-17 17:12:37
【问题描述】:

是否有一种“自动”方式在第一个 x 轴下方添加第二个 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
(...)

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

【问题讨论】:

    标签: r time-series


    【解决方案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)
    

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

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

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

    【讨论】:

      猜你喜欢
      • 2021-11-08
      • 2021-01-19
      • 2023-01-26
      • 2017-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-16
      相关资源
      最近更新 更多