OK、私はあなたのための解決策があると信じています。凡例の位置の情報をと呼ばれるオブジェクトに保存し、これらの座標に基づいてld
作成しました。polygon
理解するのは少し難しいですが、私は基本的にポリゴンを数ポイントの長さで拡張しています。これを行うには、最初に文字サイズをインチで取得しpar()$cin
、ポイントサイズをこれらの次元に変換する必要がありました(72で除算し、で乗算しpar()$ps
ます。次に、でスケーリングしてプロットの単位に変換し、par()$usr
文字幅を取得します。単位(これは正しいと思います-いずれにしても機能します!)これらの単位をld
座標の左側に3つ、右側に2つ、上下に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])
)