不管绘图尺寸如何,都对text()和legend()使用恒定的垂直调整

时间:2019-03-24 05:04:17

标签: r

要在R中绘制条形图的X轴标签,我可以这样使用text()

text(mean(bp), par("usr")[3] - 0.05*yDiff, xpd=NA, labels=journey, cex=0.9, font=2)

要绘制图例,我使用类似这样的东西:

legend("bottom", legend=abbrevLabels, fill=c(colors), xpd=NA, horiz=TRUE, bty="n", 
   cex=1.0, inset=c(0, -0.3), xjust=0, adj=0.035, 
   text.width=rep(meanLabelLen/7.5, length(legendLabels)))

此处的两个垂直偏移(图例的0.05*yDiff和插入-0.3的偏移)均位于Y轴空间中。由于各种原因,这对我来说是个问题。相反,我更喜欢以像素为单位的偏移量。也就是说,我真正想说的是:“将标签渲染到图形底部下方10个像素处。”

这怎么办?

1 个答案:

答案 0 :(得分:0)

对于位于条形图下方(在此类图的较大网格的底部)的水平X轴标签的恒定垂直偏移,事实证明,将titleline属性一起使用行为/位置一致,与设备大小无关。这是我现在要做的:

title(xlab=journey, line=0, cex=0.8, font.lab=2, xpd=NA)

其中line是整数,而0最接近该图,而更大的整数则更远(在负Y方向上)。

对于图例,我无法给出一个恒定的垂直偏移,该偏移与网格尺寸或设备尺寸无关。这里有几点:

    yjust
  • legend参数没有完全无效。我在网上寻找示例,但是无论我使用什么值,yjust都是不行的。
  • y参数起作用,但遗憾的是, not x的描述性属性结合使用;也就是说,如果x设置为bottom,则不能同时设置y。我发现这种行为令人不安,因为我通常希望这些坐标彼此独立。

要解决这些限制,请执行以下操作:

yInset <- 0.4 * (1.075 - par("fin")[2] / dev.size("in")[2])
legend(x='bottom', yjust=-0.75, inset=c(0, -yInset), legend=abbrevLabels, fill=c(colors), xpd=NA, horiz=TRUE, bty="n", cex=1.0, adj=0.035, text.width=rep(meanLabelLen/7.5, length(legendLabels)))

此逻辑有效地设置与网格尺寸和设备尺寸成比例的滑动Y偏移。根据经验确定的1.0750.4的缩放/偏移因子确实很重要,但就目前而言就足够了。

如果上面提到的legend的某些限制得到解决(或者在我误解了文档的情况下可能会得到更好的解释),将来会有所帮助。