【R】散布図に相関係数を埋め込んで描画する方法


散布図は2つの変数の相関関係を表現する時に使われるので、散布図に相関係数を付けて描画する方法を考えてみました。

解析に使うデータ

  • 以下のデータは、ある山の東側(east)と西側(west)の様々な標高で測定した樹高(m)です。
    • direction列:斜面の方角(east/west)
    • altitude列:測定地点の標高
    • tree_height列:測定された樹高
tree_height.csv
direction,altitude,tree_height
east,260,12.1
east,320,12.3
east,390,8.2
east,430,9.8
east,470,7.9
east,500,6
west,280,15.3
west,330,11.9
west,380,11.2
west,410,9.3
west,440,7.9
west,500,6.8

散布図の描画

  • ここでは、mtext関数を使ってグラフ中に文字列を挿入しています。
    • line:書き込む文字列を図形領域から何行離すかを指定します。0以上を指定すると図形領域の外側、マイナス値を指定すると図形領域の内側に文字列が書き込まれます。
    • side:文字列を表示する位置を、{1=下, 2=左, 3=上, 4=右}で指定します。
    • adj:文字列の配置を0~1の数値で指定します。0=左揃え, 0.5=中央揃え, 1=右揃え。
Rのコンソール
> # CSVファイルを読み込む
> tree_height <- read.table("C:\\tree_height.csv", header=TRUE, encoding="CP932", sep=",")
> # 相関係数を求めて、変数corrに代入する。この時、round関数で小数第3位以下を丸めている。
> corr <- round( cor(tree_height$altitude, tree_height$tree_height, method="pearson"), 2)
> corr
[1] -0.92
> # 散布図を描画する。
> plot(tree_height$altitude, tree_height$tree_height, main="標高と樹高との関係", xlab="標高(m)", ylab="樹高(m)")
> # 相関係数の値を「r={相関係数}」という文字列に直す。
> corr_text <- paste("r=", corr, sep="")
> corr_text
[1] "r=-0.92"
> # 相関係数の文字列をグラフの右上から少し隙間を空けて表示する。
> mtext(corr_text, line=-1.2, side=3, adj=0.98)

まとめ

  • 文字列を挿入する際に、text関数とmtext関数のどちらを使うべきかで、最初はかなり悩みました。
    • 今まではtext関数しか使ったことがなかったので、そもそもmtext関数を理解していませんでした。
  • helpで調べると、両者の違いが何となく分かりました。
    • text関数:Add Text to a Plot(プロットにテキストを追加する)
    • mtext関数:Write Text into the Margins of a Plot(プロットの余白にテキストを書く)
  • 今回は「グラフの上側に、右揃えで文字列を挿入する」というように、相対的な位置指定ができるmtext関数を採用しました。
    • mtext関数のlineパラメーターやadjパラメーターに小数値を指定すると、プロットエリアの端から少しだけ隙間(マージン)を付けて文字列を挿入できると分かったのが一番の収穫でした。