web-dev-qa-db-ja.com

Rプロットの凡例

プロットの凡例を2つに分割して、最初の3つの要素が4番目の要素から約1行の高さのギャップで分離されるようにします。最初は、最初の要素の前に改行を追加しようとしました。

_legend("topright",col=1,lty=1:3,lwd=1,legend=c("leg1","leg2","\nleg3"), bty="n")
_

しかし、これは要素間のギャップを拡大するようですすべて要素(これは文書化された動作ですか?)

次に、2つの別々の凡例を使用し、境界線を_"n"_に設定し、lines()を使用して境界線を再構築しました(ちなみに、凡例の1つの境界線のみを抑制する方法はありますか?)。これは機能しますが、insetの値で多くの試行錯誤が必要です。

legend()insetのデフォルト値はc(0,0)ですが、これらは明らかにlegend()の最初の呼び出しで調整されます。その凡例の要素のテキスト。 _?legend_によると、legend()呼び出しの値には

「長さlength(凡例)の数値ベクトル。凡例のテキストのx座標とy座標を示します。」

とにかく、これを2番目の呼び出しのinsetに適切な値に変換して、両方の凡例の要素を揃えることができますか?

9
ChrisW

スペースを配置する引数にNAを指定するだけです。すべての凡例引数をベクトルとして指定する必要があります。

_    set.seed(2)
    plot(0:10, rnorm(11), col = sample(c("green", "blue"), 11, replace = TRUE), 
        pch = sample(c(3, 19), 11, replace = TRUE), xlim = c(0, 12))
    legend("topright", pch = c(3, 19, NA, 3, 19), 
        col = c("green", "green", NA, "blue", "blue"), 
        legend = c("green cross", "green dot", NA, "blue cross", "blue dot"))
_

enter image description here

または、legend()を2回呼び出してより細かく制御する場合は、引数に_trace=TRUE_を指定すると、必要なx座標とy座標が返されます。

22
tim riffe