バイオインフォ道場、くまぞうです。
統計処理などで2変数の関係を調べるときに、良く使われるのが散布図です。少し工夫するとより使いやすくなります。散布図の工夫についてまとめます。
散布図を描く
散布図はplot関数
を使って書きます。
plot.r
R> plot(Sepal.Length ~ Sepal.Width, data=iris)
散布図の工夫
点が重なった際のマークの工夫
散布図は点やマークで描画することが多いですが、点が重なった場合は重なり具合の情報がわかりにくくなります。マークに透明度を追加して、重なったときに濃淡の違いによって重なり度合いを示せるようになります。マークはpch
で、直接指定したり、マークの番号で指定したりします。透明度は、col(色の指定)
の最後で指定しています(alpha値
)。alpha=0.0は透明・alpha=1.0は不透明です。
plot_mark_point.r
## 透明度指定なしのため、重なりが良くわからない R> plot(log2(Sepal.Length) ~ log2(Sepal.Width), data=iris, col=rgb(0, 0, 0))
plot_mark_alpha.r
## 透明度を指定したことにより、濃淡で重なりが分りやすい R> plot(log2(Sepal.Length) ~ log2(Sepal.Width), data=iris, col=rgb(0, 0, 0, alpha=0.1), pch=16)
複数の散布図を並べる
散布図に限ったことではありませんが、同じ種類のグラフや異なる種類のグラフを1つのグラフ内に分割して表示したい場合があります。似たようなデータ、条件を変えたデータを比較する場合に大変便利です。そのような場合は、layout
でグラフ描画領域を分割して、それぞれに描画します。尚、x軸やy軸の表示範囲をあわせるなどすると、より見やすくなります。範囲は、xlim
・ylim
等を使って指定します。
plot_double.r
R> layout(matrix(1:2, ncol=2)) # 1行2列に分割 R> plot(Sepal.Length ~ Sepal.Width, data=iris) R> plot(Petal.Length ~ Petal.Width, data=iris)
複数のデータを重ねた散布図
2種類以上のデータを1つの散布図に重ねて描画します。異なるデータ・似たデータ、条件を変えたデータを比較する場合に大変便利です。種類毎のマークを、iris$Species
のfactor情報
で切り替えています。凡例の表示は、legend関数
を使っています。
plot_set.r
R> plot(Sepal.Length ~ Sepal.Width, data=iris, pch=as.integer(iris$Species)) R> legend("topright", legend=c("setosa", "versicolor", "virginica"), pch = 1:3)
散布図を画像ファイルとして保存する
画面への表示だけでなく、画像ファイルとして保存することもできます。
plot_image.r
png("plot_image.png") plot(Sepal.Length ~ Sepal.Width, data=iris, pch="+") dev.off()