r - 无论绘图尺寸如何,都对 text() 和 legend() 使用恒定的垂直调整
问题描述
要为 中的条形图绘制 X 轴标签R
,我使用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)))
这里的两个垂直偏移——图例的 the0.05*yDiff
和插入偏移-0.3
——都在 Y 轴空间中。由于各种原因,这对我来说是个问题。相反,我更喜欢以像素为单位的偏移量。也就是说,我真正想说的是:“将标签渲染到图形底部下方10个像素处”。
如何才能做到这一点?
解决方案
对于位于条形图下方(在此类图的较大网格的底部)的水平 X 轴标签的恒定垂直偏移,事实证明,使用title
该line
属性具有一致的行为/放置,与设备大小无关。这是我现在要做的:
title(xlab=journey, line=0, cex=0.8, font.lab=2, xpd=NA)
其中line
是整数并且0
最接近绘图,并且较大的整数更远(在负 Y 方向上)。
对于图例,我想不出一个独立于网格尺寸或设备大小的恒定垂直偏移量。这里有几点:
yjust
参数 tolegend
根本不起作用。我在网上找了一些例子,但无论我使用什么值,yjust
都是不行的。y
参数确实有效,但遗憾的是,不能与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.075
和的经验确定的比例/偏移因子0.4
确实是粗略的,但现在就足够了。
legend
如果上面引用的一些限制得到解决(或者在我误解文档的情况下可能更好地解释),这将有助于将来。
推荐阅读
- node.js - 使用 object-sizeof 依赖对内存的影响是什么
- regex - SNS 中消息的正则表达式过滤
- r - 在鼠标单击事件中删除闪亮::textInput 字段中的文本
- amp-html - amp轮播箭头标记在移动版几秒钟后消失
- c# - 图像内的WPF图像未显示
- python - 在 Python 中使用 minidom 解析 XML
- python - 增加(可能)部分超出 Python 范围的 ROI 的值
- php - 如何处理表单中的错误使用 pdo 类
- python-3.x - Python 类型、pickle 和序列化
- python - 在 django 中使用 distinct() 和 filter()