Symfoware

Symfowareについての考察blog

R言語 グラフに凡例を表示する(legend)

R言語で、グラフに凡例を表示する方法を調べてみました。


legend



legendという関数で凡例を表示します。

最低限の引数は、凡例を表示するxy座標(凡例の左上座標)と凡例の内容です。


  1. legend(x, y, legend='凡例')



サンプルはこのようになりました。


  1. png("image.png", width = 500, height = 300, pointsize = 12, bg = "white")
  2. # plot関数でデータを配置
  3. plot(1:10, 1:10, type="o")
  4. # 凡例を表示
  5. legend(1, 10, legend="凡例")
  6. graphics.off()




x = 1、y = 10が凡例ボックスの左上の座標になっています。

479_01.png



右下に表示するにはこんな感じ。


  1. png("image.png", width = 500, height = 300, pointsize = 12, bg = "white")
  2. # plot関数でデータを配置
  3. plot(1:10, 1:10, type="o")
  4. # 凡例を表示
  5. legend(9, 4, legend="凡例")
  6. graphics.off()



479_02.png




キーワードで相対指定



xy座標で指定するのは結構面倒です。
そんな時は、キーワード指定で相対的に指定できます。


  1. legend("topleft", legend="凡例")




サンプルはこんなかんじです。


  1. png("image.png", width = 500, height = 300, pointsize = 12, bg = "white")
  2. # plot関数でデータを配置
  3. plot(1:10, 1:10, type="o")
  4. # 凡例を表示
  5. legend("topleft", legend="凡例")
  6. graphics.off()




きれいに左上へ凡例が配置されました。

479_03.png


使用できるキーワードは以下のとおりです。

キーワード表示位置
topleft左上
top中央上
topright右上
left中央左
center中央
right中央右
bottomleft左下
bottom中央下
bottomright右下


479_04.png




グラフの枠外に凡例を表示



グラフの枠外に凡例を表示したい場合、
・グラフの描画エリアをちょっと左にずらし、右側に余白を開ける。
・グラフ外への描画を許可する。
・グラフ外の座標を凡例の描画位置に指定する。

ということを行います。


  1. png("image.png", width = 500, height = 300, pointsize = 12, bg = "white")
  2. # 右側に余白を開ける
  3. par(mar=c(3,3,3,6))
  4. # plot関数でデータを配置
  5. plot(1:10, 1:10, type="o")
  6. # 枠外への描画を許可
  7. par(xpd=T)
  8. # 凡例を表示
  9. # par()$usr[2], par()$usr[4]で右上の座標を取得する
  10. legend(par()$usr[2], par()$usr[4], legend="凡例")
  11. graphics.off()



グラフ外の右上に凡例が表示されました。

479_05.png



グラフからちょっと離したい場合は、適当にxを増やしてやります。
※ピクセル単位ではなく、x座標のプロット間隔であることに注意。


  1. png("image.png", width = 500, height = 300, pointsize = 12, bg = "white")
  2. # 右側に余白を開ける
  3. par(mar=c(3,3,3,6))
  4. # plot関数でデータを配置
  5. plot(1:10, 1:10, type="o")
  6. # 枠外への描画を許可
  7. par(xpd=T)
  8. # 凡例を表示
  9. # par()$usr[2], par()$usr[4]で右上の座標を取得する
  10. legend(par()$usr[2] + 0.2, par()$usr[4], legend="凡例")
  11. graphics.off()



479_06.png



おまけで、下に凡例を表示したい場合。


  1. png("image.png", width = 500, height = 300, pointsize = 12, bg = "white")
  2. # 下側に余白を開ける
  3. par(mar=c(8,3,3,3))
  4. # plot関数でデータを配置
  5. plot(1:10, 1:10, type="o")
  6. # 枠外への描画を許可
  7. par(xpd=T)
  8. # 凡例を表示
  9. legend(5, -4, legend="凡例")
  10. graphics.off()



479_07.png





凡例の記号を表示する



凡例なので、ちゃんとプロットした記号を表示しないといけません。
pch=[記号の番号]で、凡例に記号を表示します。

プロットの形状はここで勉強しました。
R言語 プロットの形状、大きさ、色を指定する

サンプルはこのようになります。


  1. png("image.png", width = 500, height = 300, pointsize = 12, bg = "white")
  2. # plot関数でデータを配置
  3. plot(1:10, 1:10, type="o")
  4. # 凡例を表示
  5. # pchで記号を指定
  6. legend("topleft", legend="凡例", pch=1)
  7. graphics.off()




記号が表示されました。

479_08.png


記号の大きさ指定は、pt.cexで指定します。
1が標準で、それからの相対値を指示します。


  1. png("image.png", width = 500, height = 300, pointsize = 12, bg = "white")
  2. # plot関数でデータを配置
  3. plot(1:10, 1:10, type="o")
  4. # 凡例を表示
  5. # pt.cexでマークの大きさを指定
  6. legend("topleft", legend="凡例", pch=1, pt.cex=2)
  7. graphics.off()



479_09.png



また、凡例の文字の大きさ指定は、cexで指定します。


  1. png("image.png", width = 500, height = 300, pointsize = 12, bg = "white")
  2. # plot関数でデータを配置
  3. plot(1:10, 1:10, type="o")
  4. # 凡例を表示
  5. # cexで文字の大きさを指定
  6. legend("topleft", legend="凡例", pch=1, cex=2)
  7. graphics.off()



479_10.png





凡例に線の種類を表示する



線の種類を表示するには、ltyを指定します。
線の種類はここで勉強しました。
R言語 折れ線グラフの色、線の種類、太さを指定する

実線の凡例を表示してみます。


  1. png("image.png", width = 500, height = 300, pointsize = 12, bg = "white")
  2. # plot関数でデータを配置
  3. plot(1:10, 1:10, type="o")
  4. # 凡例を表示
  5. # ltyで線の種類を指定
  6. legend("topleft", legend="凡例", lty=1)
  7. graphics.off()



479_11.png



線の太さ指定は、lwdで指定します。


  1. png("image.png", width = 500, height = 300, pointsize = 12, bg = "white")
  2. # plot関数でデータを配置
  3. plot(1:10, 1:10, type="o")
  4. # 凡例を表示
  5. # ltyで線の種類を指定
  6. legend("topleft", legend="凡例", lty=1, lwd=3)
  7. graphics.off()



479_12.png



もちろん、pchの指定と組み合わせることもできます。

479_13.png




線、記号の色を指定する



線や記号の色はcolで指定します。


  1. png("image.png", width = 500, height = 300, pointsize = 12, bg = "white")
  2. # plot関数でデータを配置
  3. plot(1:10, 1:10, type="o")
  4. # 凡例を表示
  5. # colで線の色を指定
  6. legend("topleft", legend="凡例", pch=1, lty=1, col=rgb(1,0,0))
  7. graphics.off()



479_14.png



また、凡例文字の色の指定は、text.colで行います。


  1. png("image.png", width = 500, height = 300, pointsize = 12, bg = "white")
  2. # plot関数でデータを配置
  3. plot(1:10, 1:10, type="o")
  4. # 凡例を表示
  5. # text.colで凡例文字の色を指定
  6. legend("topleft", legend="凡例", pch=1, lty=1, col=rgb(1,0,0), text.col=rgb(0,1,0))
  7. graphics.off()



479_15.png





凡例の囲みを消す



凡例の囲み線を消すには、bty="n"を指定します。


  1. png("image.png", width = 500, height = 300, pointsize = 12, bg = "white")
  2. # plot関数でデータを配置
  3. plot(1:10, 1:10, type="o")
  4. # 凡例を表示
  5. # bty="n"で、凡例の線を描画しない
  6. legend("topleft", legend="凡例", bty="n")
  7. graphics.off()



479_16.png




凡例の背景色を指定する



凡例領域の背景色はbgで指定します。


  1. png("image.png", width = 500, height = 300, pointsize = 12, bg = "white")
  2. # plot関数でデータを配置
  3. plot(1:10, 1:10, type="o")
  4. # 凡例を表示
  5. # ltyで線の種類を指定
  6. legend("topleft", legend="凡例", bg="gray75")
  7. graphics.off()



479_17.png




複数の凡例を表示する



複数の凡例を表示するには、それぞれのオプションにベクトルでデータを指定します。
3つの凡例を表示する例はこんなかんじです。


  1. png("image.png", width = 500, height = 300, pointsize = 12, bg = "white")
  2. # plot関数でデータを配置
  3. plot(1:10, 1:10, type="o")
  4. # 凡例を表示
  5. legend("topleft",
  6.     legend=c("凡例1", "凡例2", "凡例3"),
  7.     pch=c(1,2,3),
  8.     lty=c(1,2,3),
  9.     col=c("red", "blue", "green")
  10.     )
  11. graphics.off()



479_18.png



凡例表示の折り返し



凡例を横に2つずつ並べたい場合などは、ncolで数値を指定します。


  1. png("image.png", width = 500, height = 300, pointsize = 12, bg = "white")
  2. # plot関数でデータを配置
  3. plot(1:10, 1:10, type="o")
  4. # 凡例を表示
  5. legend("topleft",
  6.     legend=c("凡例1", "凡例2", "凡例3"),
  7.     pch=c(1,2,3),
  8.     lty=c(1,2,3),
  9.     col=c("red", "blue", "green"),
  10.     ncol=2
  11.     )
  12. graphics.off()



479_19.png




オプションのまとめ



他にも色々なオプションがありますが、ここで試したものをまとめておきます。

キーワード意味
pchマーク種類
pt.cexマークの大きさ
lty線の種類
lwd線の太さ
colマーク、線の色
cex凡例文字の大きさ
text.col凡例文字の色
bty凡例の囲み線の有無("n"で非表示)
bg凡例領域の背景色




【参考URL】

12. 見栄えのよいグラフ(その1):字をきれいに

グラフィックス参考実例集:凡例 legend

51. 低水準作図関数

Add Legends to Plots


R言語 掲載記事のまとめ
関連記事

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2014/10/08(水) 22:57:56|
  2. 備忘録
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
<<Debian 7にインストールされているフォントの一覧を表示する(fc-list) | ホーム | R言語 複数の折れ線を同じグラフに表示する>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://symfoware.blog68.fc2.com/tb.php/1503-51de75cc
この記事にトラックバックする(FC2ブログユーザー)