使用多个图面板时,第二轴标签要大

时间:2016-06-07 12:41:33

标签: r

我正在使用标准R图并创建一个带有两个轴的图形。 一切都很好,直到我试图绘制par(mfrow=c(4,3))。右侧的标签总是有点大......当我绘制par(mfrow=c(1,1))时,一切看起来都很好。

new_cex <- .75
pdf(file='jnk.pdf', width=11.69, height=8.27)
par(mfrow=c(4,3), mar=c(5,4,4,5)+.1)
for(i in 1:12) {
  x <- runif(10)
  y1 <- runif(10)
  y2 <- runif(10)

  plot(1, type="n", xlim=range(x), bty="n", axes=F, cex.lab=new_cex,
       ylim=range(pretty(range(y1))), xlab="Time (hours)", ylab="ABC")
  axis(1, at=x, labels=round(x,2), cex.axis=new_cex, las=2)
  axis(side=2, at=pretty(range(y1)), cex.axis=new_cex, las=2)
  points(x, y1, lwd=2)
  lines(lowess(x, y1), lwd=6)
  par(new=TRUE)
  plot(1, type="n", axes=F, bty="n", xlab="", ylab="", xlim=range(x), ylim=range(y2))
  axis(side=4, at=pretty(range(y2)), cex.axis=new_cex, las=2)
  mtext("CDE",side=4,line=3, cex=new_cex)
  points(x, y2, col=2, lwd=2)
  lines(lowess(x, y2), col=2, lwd=6, lty=2)
}

dev.off()

我使用了全局new_cex变量,我发现在mfrow=c(4,3)的情况下,标签总是有点大。所以总的来说它正在改变......

也许有人可以尝试一下,也许这是一个版本化的东西......通过将3行更改为mfrow=c(1,1),所有轴标签将具有相同的大小......

1 个答案:

答案 0 :(得分:2)

mtext的帮助明确指出根据par(mfrow=c(4,3))不缩放cex:

  

CEX
  人格膨胀因素。 NULL和NA相当于1.0。   这是一个绝对的衡量标准,不是通过标准(&#34; cex&#34;)或通过设置来缩放的   par(&#34; mfrow&#34;)或par(&#34; mfcol&#34;)。可以是矢量。

要解决此问题,请保存原始cex,然后在更改par(mfrow)后测量缩小比例,并在mtext中使用,即:

par(mfrow=c(1,1)) # to restore original cex and layout
new_cex <- .75
originalCex <- par("cex")
par(mfrow=c(4,3), mar=c(5,4,4,5)+.1)
originalCexReduced <- par("cex")
cexRatio <- originalCexReduced / originalCex
for(i in 1:12) {
  x <- runif(10)
  y1 <- runif(10)
  y2 <- runif(10)

  plot(1, type="n", xlim=range(x), bty="n", axes=F, cex.lab=new_cex,
       ylim=range(pretty(range(y1))), xlab="Time (hours)", ylab="ABC")
  axis(1, at=x, labels=round(x,2), cex.axis=new_cex, las=2)
  axis(side=2, at=pretty(range(y1)), cex.axis=new_cex, las=2)
  points(x, y1, lwd=2)
  lines(lowess(x, y1), lwd=6)
  par(new=TRUE)
  plot(1, type="n", axes=F, bty="n", xlab="", ylab="", xlim=range(x), ylim=range(y2))
  axis(side=4, at=pretty(range(y2)), cex.axis=new_cex, las=2)
  mtext("CDE",side=4,line=3, cex=new_cex*cexRatio)
  points(x, y2, col=2, lwd=2)
  lines(lowess(x, y2), col=2, lwd=6, lty=2)
}

cexRatio0.66,或多或少都是你注意到的。