LoginSignup
0
0

はじめに

Rで散布図を描くと「まっさらなプロットエリア内にデータが点として描画」されますが、今回はプロットエリア内にグリッド線(罫線的なもの)を入れる方法を備忘録としてまとめてみました。

(論文等で散布図にグリッド線を入れている図はほとんど見かけないので、まさに「誰得」的な記事ですね...)

使用するデータ

作成したコード

  • 以下のコードでは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"                 # 凡例の背景を白で塗りつぶす
  )

image.png

その他

  • X軸とY軸の目盛りの間隔は「やや広め」くらいにしておいた方が見やすいです。
    • グリッド線を入れるとプロットエリアがごちゃごちゃするので、目盛りの間隔が狭いと非常に見づらくなります。
  • グリッド線はplot関数で作った図であれば利用出来るので、折れ線グラフなど別のタイプの図でも同じ方法を活用できます。

参考URL

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0