6

Rの凡例に改行があり、問題はグラフィックが期待どおりに表示されないことです。私の最小限の例は次のとおりです。

plot(1)
legendLabel<-c("t\nu ","tu","wh","trr\nni")
legend("top",legend=legendLabel,horiz=TRUE,fill=c("red","blue","gray","black"))

凡例の上下の余白は等しいと思いますが、そうではありません。ここに画像の説明を入力してください

添付の画像でわかるように、下マージンは上マージンよりも小さくなっています。

誰かがそれを修正する方法を知っていますか、または誰かが問題が何であるかを教えてもらえますか?

ありがとう。

4

2 に答える 2

4

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])
)
于 2012-11-23T08:53:49.703 に答える
2

@'Marc in the box'のおかげで、私は良い解決策を見つけました。彼が言ったようにボックスを無効にしてbty="n"から

  ld<-legend("top",legend=legendLabel, cex=0.65, fill=colorNames, horiz=TRUE,bty="n")
  height<-(ld$rect$top-ld$text$y[1])*2
  xs <- c(ld$rect$left, ld$rect$left, ld$rect$left+ld$rect$w, ld$rect$left+ld$rect$w)
  ys <- c(ld$rect$top, ld$rect$top-height, ld$rect$top-height, ld$rect$top)
  polygon(x = xs , y = ys)

そこで、最初に上隅とdataPointの間の距離を計算し、その後にこの情報を使用してポリゴンを描画しました。私が見た限りでは、かなり一般的な作品があります。

ありがとう。

于 2012-11-23T13:10:44.970 に答える