是否可以自动获取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"))
答案 0 :(得分:5)
在plot
来电之后,在添加legend
之前,请使用par("usr")
*来提取绘图区域的坐标。
然后,不是使用'关键字'和inset
定位图例,而是使用x
和y
,使用从{{1}获得的绘图区域的右上角坐标}。使用合适的系数调整par("usr")
。
x
只是为了好玩,一个更复杂的选择。
在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
中的x
和y
中的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"))
*来自?par
usr
c(x1, x2, y1, y2)
形式的向量,给出绘图区域的用户坐标的极值。
在指定inset
个参数时进行的位置计算实际上基于par("usr")
(参见legend
code中的第188-199行)。