在图窗口的各个面板上控制ylab和xlab

时间:2012-12-12 18:20:19

标签: r data-visualization

考虑以下示例:

dat <- matrix(rexp(240, rate=.1), ncol=6)
par(mfrow=c(3,2))

for (i in 1:6){
    plot(dat[,i],xlab = "Day of year",col = "black",
         ylab = expression(paste("Temperature ",degree,"C")))
  }

这将生成6个子图,其中清楚地显示了x和y标签。 enter image description here

我想改变这一点,以便ylabel仅显示在右侧的面板上(以避免重复)。所以,我写道:

for (i in 1:6){
  if (i %% 2 == 0){
    plot(dat[,i],ylab = "",xlab = "Day of year",col = "black")
  }
  else {plot(dat[,i],ylab = expression(paste("Temperature ",degree,"C")),
             xlab = "Day of year",col = "black")
  }
}

哪个产生: enter image description here

我们可以看到只有偶数编号的面板现在有ylabel。我还希望得到这个数字,只有第5和第6面板有xlabel,我可以通过添加另一个if语句来实现。然而,做这么简单的事情似乎做了很多工作。任何人都可以提出替代方法。由于我是R的初学者,我宁愿首先使用一些R基函数,即不是格子也不是ggplot。但是,如果使用基本功能没有更简洁的方法,欢迎提出其他建议。

1 个答案:

答案 0 :(得分:2)

ifelse是一条有用的捷径。

for (i in 1:6){
    plot(dat[,i],xlab = ifelse(i %% 2 == 0,"","Day of year",col = "black",
         ylab = ifelse(i %% 2 == 0,"",expression(paste("Temperature ",degree,"C")))

此外,如果所有轴都相同,您可以将mtextouter=TRUE一起使用。在绘制没有标签的所有内容之后,请尝试:

mtext("Day of Year", side=1, padj=-2, outer=TRUE)
mtext("Temperature", side=2, padj=2, outer=TRUE)

enter image description here