自动计算图例的适当插入值

时间:2017-02-06 19:28:15

标签: r plot

是否可以自动获取inset的适当值,以便图例的左角始终位于图的右上角之外?

在下面的图中,我必须手动为inset尝试几个值。不必手动操作会很好,因为我必须制作多个图。

graphics.off()
windows(width = 5, height = 5)
set.seed(42)
par(mar = c(5,5,1,10))
plot(rnorm(50,15,5), rnorm(50,15,3),
                xlim = c(0,30), ylim = c(5,25),
                pch = 19, col = c("red","blue"))

par(xpd = TRUE)
legend("topright", inset = c(-.80, 0),
                pch = 19, col = c("red","blue"),
                legend = c("LEGEND 1","Second Legend"))

enter image description here

1 个答案:

答案 0 :(得分:5)

plot来电之后,在添加legend之前,请使用par("usr") *来提取绘图区域的坐标。

然后,不是使用'关键字'和inset定位图例,而是使用xy,使用从{{1}获得的绘图区域的右上角坐标}。使用合适的系数调整par("usr")

x

enter image description here

只是为了好玩,一个更复杂的选择。

coord <- par("usr") legend(x = coord[2] * 1.05, y = coord[4], pch = 19, col = c("red", "blue"), legend = c("LEGEND 1", "Second Legend")) 之后,使用位置plot拨打legend,但不将其绘制到设备(topright),并将其分配给对象。

提取图例框的左侧plot = FALSE和顶部x坐标及其宽度(请参阅y中的部分),以便使用?legend中的xy中的legend

leg <- legend("topright", pch = 19, col = c("red", "blue"),
              legend = c("LEGEND 1", "Second Legend"),
              plot = FALSE)

legend(x = (leg$rect$left + leg$rect$w) * 1.05, y = leg$rect$top,
       pch = 19, col = c("red", "blue"),
       legend = c("LEGEND 1", "Second Legend"))

enter image description here

*来自?par

  

usr c(x1, x2, y1, y2)形式的向量,给出绘图区域的用户坐标的极值。

在指定inset个参数时进行的位置计算实际上基于par("usr")(参见legend code中的第188-199行)。