読者です 読者をやめる 読者になる 読者になる

ルビスコくん空を飛ぶ

博士学生(D1)の日記です.日記に加えてプログラミング(R)のメモ書きもします.

2種類のカテゴリデータにそれぞれ色とプロットのマーカーを割り当てて散布図を描きたい

「変数XとYの関係に,別の変数ZとWが与えている影響をみたいとき」はXとYをプロットしZとWで色とマーカーを変えた図を出すという方法がある(ただし図が煩雑にはなるのは想像に難くない).こんな図は,描画パッケージggplot2を使えば簡単にできる.

例に使うデータセットはairqualityとする.XにSolar.Rつまり太陽放射,YにOzone(オゾン濃度)をプロットし,気温Tempと風速Windを,それぞれ3つのクラスにわけて,それぞれ色とマーカーでわける.

まずはTempとWindを3つのクラスに分ける.

rad <- cut(airquality$Solar.R, breaks=c(0, 100, 200, 500), labels=c("~100", "100~200", "200~"))
win <- cut(airquality$Wind, breaks=c(0, 8, 12, 50), labels=c("~8", "8~12", "12~"))

 

f:id:pam715:20160730140820p:plain

cut()は連続的な変数をカテゴリに変換する関数で,"labels="以降にそれぞれのカテゴリに対する名前を振り分けることができる.あとはプロットするだけ.

library(ggplot2)
pl <- ggplot(airquality, aes(x=Temp, y=Ozone))
pl2 <- pl + geom_point(aes(colour=factor(rad), shape=factor(win)), size=8) + theme_bw()
print(pl2)

f:id:pam715:20160730141657p:plain

すごく便利.

ただ,これをもしR標準のplot()でやろうとすると,少し工夫が必要である.まず,カテゴリの名前を1, 2, 3という数字にして変数を分類して,pchとcolに行列として入れてしまえばよいと私は思った.つまり,

rad <- cut(airquality$Solar.R, breaks=c(0, 100, 200, 500), labels=1:3)
win <- cut(airquality$Wind, breaks=c(0, 8, 12, 50), labels=1:3)
plot(airquality$Temp, airquality$Ozone, col=rad, pch=win)

こういうことだ.radで色,winでマーカーを指定できていると思いきや,これではエラーがでた.

f:id:pam715:20160730142544p:plain

ちなみにcolだけなら大丈夫.pchがこのような指定の方法ができないらしい.

f:id:pam715:20160730142820p:plain