好的,我相信我有一个解决方案给你。我将图例位置的信息保存在一个名为的对象中ld
,然后polygon
根据这些坐标创建一个。理解起来有点棘手,但我基本上是将多边形扩展了几个点大小的长度。为了做到这一点,我必须首先获得以英寸为单位的字符大小,par()$cin
并将点大小转换为这些尺寸(除以 72 并乘以par()$ps
。然后,通过缩放将其转换为绘图单位par()$usr
以获得字符宽度单位(我认为这是正确的 - 在任何情况下它都有效!)。我在ld
坐标的左侧添加了 3 个单位,在右侧添加了 2 个,向上添加了 1 个,向下添加了 1 个。这是结果和代码:
plot(1)
legendLabel<-c("t\nu ","tu","wh","trr\nni")
ld <- legend("top",legend=legendLabel,horiz=TRUE,fill=c("red","blue","gray","black"), bty="n")
CIN <- par()$cin
PS <- par()$ps
USR <- par()$usr
CIN.USR <- c((CIN[1]/72*PS)/(USR[2]-USR[1]), (CIN[2]/72*PS)/(USR[4]-USR[3]))
xs <- c(ld$text$x[1], ld$text$x[1], ld$text$x[length(ld$text$x)], ld$text$x[length(ld$text$x)])
ys <- c(ld$text$y[1], ld$text$y[1], ld$text$y[length(ld$text$x)], ld$text$y[length(ld$text$x)])
polygon(
x = xs + c(-3*CIN.USR[1], -3*CIN.USR[1], 2*CIN.USR[1], 2*CIN.USR[1]),
y = ys+c(-1*CIN.USR[2], 1*CIN.USR[2], 1*CIN.USR[2], -1*CIN.USR[2])
)