1. ホーム
  2. r

[解決済み] ベースグラフィックスでプロットエリアの外側に凡例をプロットする?

2022-02-14 10:36:32

質問内容

タイトルの通りです。 ベースグラフィックスを使用しているときに、プロット領域の外側に凡例をプロットするにはどうしたらよいでしょうか。

をいじってみようと思ったのですが layout を作成し、凡例だけを含む空のプロットを作成します。しかし、基本的なグラフの設備だけを使用する方法に興味があり、例えば par(mar = ) プロットの右側に凡例のためのスペースを確保するためです。


以下はその例です。

plot(1:3, rnorm(3), pch = 1, lty = 1, type = "o", ylim=c(-2,2))
lines(1:3, rnorm(3), pch = 2, lty = 2, type="o")
legend(1,-1,c("group A", "group B"), pch = c(1,2), lty = c(1,2))

を生成します。

しかし、前述の通り、凡例はプロット領域の外(例えば、グラフ/プロットの右側)に欲しいです。

どのように解決するのですか?

おそらく、必要なのは par(xpd=TRUE) で、プロット領域の外側に描画できるようにします。ですから、もしメインプロットを bty='L' を使うと、右側に凡例用のスペースができます。通常、これはプロット領域にクリップされます。 par(xpd=TRUE) で、少し調整すれば、凡例が可能な限り右側に表示されるようになります。

 set.seed(1) # just to get the same random numbers
 par(xpd=FALSE) # this is usually the default

 plot(1:3, rnorm(3), pch = 1, lty = 1, type = "o", ylim=c(-2,2), bty='L')
 # this legend gets clipped:
 legend(2.8,0,c("group A", "group B"), pch = c(1,2), lty = c(1,2))

 # so turn off clipping:
 par(xpd=TRUE)
 legend(2.8,-1,c("group A", "group B"), pch = c(1,2), lty = c(1,2))