【发布时间】:2014-06-30 22:38:47
【问题描述】:
我正在尝试找出一种方法来计算图例的高度,然后再设置图的边距。我打算将图例放在 x 轴标签和标题下方的图下方。
由于它是绘制一系列事物的函数的一部分,因此图例的大小可以扩大和缩小以适应 2 个项目(最多 15 个或更多),所以我需要弄清楚如何动态地做到这一点,而不是硬编码。所以,最后我需要动态设置边距和其他一些零碎的东西。
关键的挑战是在绘制图之前找出图例的高度以输入par(mar),但是在剖析图例的基本代码之后,似乎不可能得到高度值的可靠估计,除非情节实际上是绘制的(鸡和蛋有人吗?)
这是我已经尝试过的:
使用基本图例函数的
legend$rect$h输出获取高度(这似乎给出了一个不正确的高度值,除非实际绘制了绘图)计算图例中的行数(简单)并将其乘以行高(为此,您似乎需要将其转换为英寸(基本图例代码使用 yinch 和 I'我也尝试过
grconvertY,但除非绘制了情节,否则这些都不起作用)。
另一个挑战是计算出放置图例的正确 y 值 - 我认为一旦我解决了第一个挑战,第二个挑战就会很容易。
编辑:
在为这()如何工作而大汗淋漓之后。我有一些见解和几个问题。为了清楚起见,这就是我的函数本质上所做的:
步骤 1) 设置边距
步骤 2) 在左轴上创建条形图
步骤 3) 重新设置 usr 坐标 - 这是确保右轴对齐所必需的,否则它会根据 x 轴比例绘制。当它们明显不同时不好。
步骤 4) 创建右轴
第 5 步)在右轴上创建一系列折线图
步骤 6) 对两个轴和 x 轴进行一些标记
第 7 步)添加图例
这里有问题
Q1) 报告的单位是什么?我对边缘线和坐标(用户坐标)感兴趣,英寸是不言自明的。 - 我可以使用 grconvertY() 进行一些转换,但我不确定我在看什么以及我应该转换成什么 - 文档不是很好。
Q2) 我需要在步骤 1 中设置边距,以便图表底部有足够的空间放置图例。我想我做对了,但是我需要在设置右轴和折线图之后设置图例,这意味着用户坐标(以及一英寸的像素值已经改变。因为上面的 Q1 我'我不确定如何将一个系统转换为另一个系统。如果有这方面的任何想法,我们将不胜感激。
【问题讨论】:
-
您可以生成图例并将其分配给变量而不是绘制它 - 使用选项
plot=FALSE -
感谢 user20650。我已经尝试过了,如果我在创建情节之前调用它,我会得到不正确的结果。这就是我访问 $rect$h 的方式,它是使用带有图例函数的 plot=FALSE 的输出
标签: r plot legend legend-properties