legend関数の使い方 ~グラフに凡例を表示する~【R備忘録】

グラフを作成したときに必要なのが凡例です。
Rで出力したグラフに凡例をつける際、使用する関数としてlegend()があります。
本記事ではその使い方について説明したいと思います。

スポンサーリンク

基本的な使い方(位置の指定、凡例のテキストの入力)

legend関数の基本的な使い方は” legend(凡例の左上角のx座標 , 凡例の左上角のy座標 , 凡例のテキスト) “です。
試しに以下のように入力します。

plot(a,b,type="n") #type="n"のため、適当な変数で大丈夫です
legend(1,4,"legend") #(1,4)の位置に凡例の左角が来ます

この結果以下のようなグラフが出力されます。

legend()の使用例

このように書きたい凡例を指定した位置に出力することができます。

しかし、座標での指定は少々めんどくさいです。
legend関数にはありがたいことに自動的に端に配置することができるキーワードが設定されております。
具体的には“topleft”、”topright”、”bottomleft”、”bottomright”などがキーワードとしてあり、座標を指定する代わりに入力することで自動的に凡例を端に配置してくれます。

plot(a,b,type="n")
legend("topleft","topleft")
legend("top","top")
legend("topright","topright")
legend("left","left")
legend("center","center")
legend("right","right")
legend("bottomleft","bottomleft")
legend("bottom","bottom")
legend("bottomright","bottomright")

例えば上記のように入力すると以下のように自動的に配置してくれます。

位置を指定するキーワード

「二つ以上の凡例を加えたい!」

そんな場合も多々あると思います。
この場合はベクトルを生成する” c() ” という関数を利用して入力します。
また、” title= “と引数を加えることによって凡例のタイトルを入力することができます。


plot(a,b,type="n")
legend("topleft",c("first","second","third"),title="複数の凡例を入力")

すると以下のように複数のテキストが縦に並んだ凡例を出力することができます。

複数の凡例を入力する

ここまでが基本的な使い方となっています。
しかし、凡例の横に存在する微妙なスペースが気になりますね、、、

実はこのスペースには各凡例がグラフのどこを指しているのかを示すために利用します。
次章ではその方法について記載したいと思います。

スポンサーリンク

各凡例が示すものの指定(pch,lty,fillの使用)

「それぞれの凡例はグラフ内でどこのことを指しているのか」
このことを示さないと読者が図を理解することは難しくなります。
本章ではその示し方について紹介したいと思います。

散布図の場合(プロットの種類を指定)

散布図の場合は凡例が示すプロットの種類を表すことが多いです。
その際使う引数としては ” pch ” です。
例えば以下のように指定します。

plot(a,b,type="p",pch=19,ylim=c(0,6))#凡例と重なることを防ぐためylimを追加
legend("topleft","プロットを指定",pch=19)#pch=19は黒の〇が出力

このように作成する散布図で使用するプロットと同じ形のものをpchで入力します。

pchで指定できるプロットの形はこちらの記事で紹介しています。
plot関数の使い方 〜Rでグラフを作成するために〜

このコードを入力することで以下の図が出力されます。

pchによる凡例が示すものの指定

凡例が散布図のプロットを示していることが分かり、図として見やすくなります。
凡例が示すものの色を変更する際はplot関数と同様に ” col ” という引数を使います。
例えば散布図のプロットが赤色の場合は以下のようにコードを入力します。

plot(a,b,type="p",pch=19,ylim=c(0,6),col="red")
legend("topleft","プロットを指定",pch=19,col="red")
色を変えてみる

このように散布図のプロットの形や色が何であれ凡例が示すものの指定をすることができます。

折れ線グラフの場合(線を指定)

折れ線グラフの場合は凡例が示す線の種類を表すことが多いです。
その際使う引数としては ” lty ” ” lwdです。
例えば以下のように指定します。

plot(a,b,type="l",pch=19,ylim=c(0,6),lty=1,lwd=2,col="gray")#色は灰色にしてみた
legend("topleft","プロットを指定",lty=1,lwd=2,col="gray")#ltyは線の種類、lwdは線の太さを指定
#(こちらも色は同様に変えられる)

このように作成する折れ線グラフで使用するプロットと同じ形のものをlty、lwdで入力します。

pchで指定できるプロットの形はこちらの記事で紹介しています。
plot関数の使い方 〜Rでグラフを作成するために〜

このコードを入力することで以下の図が出力されます。

lty、lwdによる凡例が示すものの指定

このように凡例が示す線を指定することができます。
またプロット付きの折れ線グラフ(plot関数でいうtype=”b”のような場合)はpchとlty,lwdの合わせ技で出力することができます。
例えば以下のように入力します。

plot(a,b,type="b",ylim=c(0,6),pch=18,lty=4,lwd=2,col="blue")
legend("topleft","線とプロットを指定",pch=18,lty=4,lwd=2,col="blue")
線とプロットの指定

このようにプロット付き折れ線グラフにも対応することができます。

棒グラフの場合(箱による指定)

棒グラフの場合は凡例が示したい棒の色を箱で表すことが多いです。
その際使う引数としては ” fill “ です。
例えば以下のように指定します。

barplot(b~a,col="black",ylim=c(0,6))
#要因aに対する要因bの棒グラフはファンクション(y~xの形)で表します。
box(lty=1)#barplotは外枠が付かないためboxで付与します
legend("topleft","棒を指定",fill="black")#引数fillで直接色を指定します。

このように作成する棒グラフで使用する色をfillで入力します。
すると以下のように出力されます。

fillによる示す色の指定

このように凡例がどの色を示すかを明白にしてくれます。

また、二つ以上の要因に対する棒グラフの場合、色分けして表示することが多いと思います。
その時は前章の二つ以上の凡例を示す場合と同様に” c() ” という関数を利用して入力します。

barplot(b~a,col=c("red","blue","green","yellow"),ylim=c(0,6))
box(lty=1)
legend("topleft",c("赤を指定","青を指定","緑を指定","黄色を指定"),fill=c("red","blue","green","yellow"))
色を分けて指定

このように凡例の各色が何を示しているのかを指定することができます。

スポンサーリンク

legend関数で設定されている引数のうちよく使われるもの

上記のように必須の引数のほかにlegend関数で設定されたよく使う引数としては

・bg:凡例を囲う外枠の塗りつぶしの色
・box.lty, box.lwd, box.col:凡例を囲う外枠の設定
・text.col:テキストの色の指定
・ncol:凡例の行の数を指定

があります。
これらをすべて組み合わせて以下のように入力します。

barplot(b~a,col=c("red","blue","green","yellow"),ylim=c(0,6))
box(lty=1)
legend("topleft",c("赤を指定","青を指定","緑を指定","黄色を指定"),fill=c("red","blue","green","yellow"),
bg="gray",#凡例の背景はgray
box.lty=2,#凡例の外枠の線の種類はlty=2
box.lwd=2,#凡例の外枠の線の太さはlwd=2
box.col="gray40",#凡例の外枠の線の色はgray40(ちょっと濃い灰色)
text.col="white",#テキストの色はgray
ncol=2)#凡例の列の数は2

すると指定した凡例の設定通りに出力されます。

出力結果

このようにカオスな凡例(笑)が出来上がります。

スポンサーリンク

おわりに

今回は凡例を作成するために利用されるlegend関数について紹介しました。
legend関数は今回使用したplot、boxplotのほかに
箱ひげ図を出力する ” boxplot ” 、円グラフを出力する ” pie ” 、近似直線などの
凡例にも利用できます。

私の記事が皆様の力添えになれば幸いです。

コメント

タイトルとURLをコピーしました