はじめに
Rで散布図を描くと「まっさらなプロットエリア内にデータが点として描画」されますが、今回はプロットエリア内にグリッド線(罫線的なもの)を入れる方法を備忘録としてまとめてみました。
(論文等で散布図にグリッド線を入れている図はほとんど見かけないので、まさに「誰得」的な記事ですね...)
使用するデータ
-
以前に散布図を描画する方法を紹介した記事で使った、樹高と標高のデータを使用しました。
- ファイル名は
tree_height.csv
となります。
- ファイル名は
作成したコード
- 以下のコードではX軸とY軸の両方にグリッド線を入れており、その際に「
plot
関数を呼び出した時点ではX軸とY軸の目盛りを描画せず(xaxt="n", yaxt="n"
)、グリッド線付きで軸目盛りを後から描画する」という方法を使っています。- グリッド線はX軸のみ、あるいはY軸のみに設定することも可能です。
- もっとスマートな方法があるのかもしれませんが、私の知る限りではこの方法が良いと考えています。
- グリッド線を単純に入れるだけであれば、
grid
という関数を利用した方がスマートなコードになります。(@WolfMoon さん、コメントありがとうございました)
- グリッド線を単純に入れるだけであれば、
- グリッド線を入れると凡例がグリッド線と重なって見づらくなるため、凡例の背景を白で塗りつぶしています(
bg="white"
)。
グリッド線付きの散布図の作成
# データを読み込む。
setwd("C:\\")
tree_height <- read.table(".\\tree_height.csv", header=TRUE, encoding="CP932", sep=",")
# 縦横5インチの作図エリアとする。
dev.new(width=5, height=5)
# type="n"を指定して、散布図の「枠」だけを作成する。
plot(tree_height$altitude, tree_height$tree_height,
main="標高と樹高との関係",
xlab="標高(m)", ylab="樹高(m)",
xlim=c(250,500), ylim=c(6,16), # X軸とY軸の範囲を指定
xaxt="n", yaxt="n", # X軸とY軸を描画しない
type="n" # 点をプロットしない
)
# X軸とY軸の目盛りを描画する際に、グリッド線(点線)を入れる
# tck: グリッド線の太さ
# lty: グリッド線のタイプ
# las=1: 軸の値を水平に表示
axis(side=1, at=seq(250,500,50), tck=1.0, lty="dotted", las=1)
axis(side=2, at=seq(6,16,2), tck=1.0, lty="dotted", las=1)
# 東斜面のデータを白丸(〇)で描画する。
points(tree_height$altitude[tree_height$direction == "east"],
tree_height$tree_height[tree_height$direction == "east"],
pch = 1, cex = 1.5)
# 西斜面のデータを黒丸(●)で描画する。
points(tree_height$altitude[tree_height$direction == "west"],
tree_height$tree_height[tree_height$direction == "west"],
pch = 16, cex = 1.5)
# 散布図の右上に凡例を表示する。
# 文字サイズは通常(cex = 1)で、記号のサイズは1.5倍(pt.cex = 1.5)に設定
legend("topright",
pch = c(1, 16),
cex=1, pt.cex=1.5,
legend=c("east", "west"),
bg="white" # 凡例の背景を白で塗りつぶす
)
その他
- X軸とY軸の目盛りの間隔は「やや広め」くらいにしておいた方が見やすいです。
- グリッド線を入れるとプロットエリアがごちゃごちゃするので、目盛りの間隔が狭いと非常に見づらくなります。
- グリッド線は
plot
関数で作った図であれば利用出来るので、折れ線グラフなど別のタイプの図でも同じ方法を活用できます。