目次(まとめ)
◾️ エクセル上で作ったデータをRで読み込んで可視化
◾️ "par(new = T)" と書くだけで、グラフを重ね合わせることができる
こんにちは、みっちゃんです。
今回の記事では「Rでグラフを重ね合わせたい」という方向けに、"par(new = T)" という関数を実行してグラフを重ね合わせる方法を解説します。
エクセル上で作ったデータをRで読み込んで可視化
ここでは、以下のようなエクセルデータを "test.csv" と保存して、説明に用います。
"test.csv" は、CSV(コンマ区切り)ファイルなので、Rで以下のように読み込みます(詳細は、こちらの記事をご覧ください)。
$ R -q
> data <- read.csv("~/Desktop/test.csv", header = T, row.names = 1)
> data
Math Science
A -0.3153816 0.26553345
B 0.7258541 -1.39414658
C 1.4456824 1.23403342
D -1.2046314 -0.16611958
E 1.3916466 -0.09483074
例えば、このデータを用いて散布図を描く場合には、以下のように実行します。
> plot(data$Math, data$Science)
"par(new = T)" と書くだけで、グラフを重ね合わせることができる
ここで、名前ごとに、マーカーの色を変えたい場合を考えます。
やり方はいろいろ考えられますが、一番シンプルな方法は、以下のようなやり方です。
まず、上で図示した散布図の横軸の最大値、最小値を取得します。
> x_max <- max(data$Math)
> x_min <- min(data$Math)
同じように、縦軸の最大値、最小値を取得します。
> y_max <- max(data$Science)
> y_min <- min(data$Science)
これで準備は完了です。
まず、Aさんのデータを「赤色」でプロットしてみます。
> plot(data$Math[rownames(data)=="A"], data$Science[rownames(data)=="A"], col = "red", xlim = c(x_min, x_max), ylim = c(y_min, y_max))
次に、上で作成した散布図の上に、Bさんのデータを「青色」で重ね合わせたい場合には、まず、以下のように実行します。
> par(new = T)
"par( )" というのは、さまざまなパラメータを設定するときに使用する関数です。
これを実行した後に、以下のように、Bさんのデータをプロットします。
結果として、赤色のAさんのデータと青色のBさんのデータが重なった散布図ができあがります。
同じような手順を以下のように実行すると、A〜Eさんのデータを重ね合わせることができます。
> par(new=T)
> plot(data$Math[rownames(data)=="C"], data$Science[rownames(data)=="C"], col = "pink", xlim = c(x_min, x_max), ylim = c(y_min, y_max))
> par(new=T)
> plot(data$Math[rownames(data)=="D"], data$Science[rownames(data)=="D"], col = "orange", xlim = c(x_min, x_max), ylim = c(y_min, y_max))
> par(new=T)
> plot(data$Math[rownames(data)=="E"], data$Science[rownames(data)=="E"], col = "green", xlim = c(x_min, x_max), ylim = c(y_min, y_max))
しかし、今回の例では、横軸の名前、縦軸の名前も重なり合わさってしまっているという問題があります。
これを避けるためには、plot関数の中で、あらかじめ横軸の名前(例えば「xlab = "math"」)と縦軸の名前(例えば「ylab = "science"」)と指定しておけばOKです。
もしくは、横軸(名前を含む)、縦軸(名前を含む)、枠線だけを、最後にプロットするように、以下のようにオプションをつけることもできます。
> par(new=T)
> plot(data$Math[rownames(data)=="C"], data$Science[rownames(data)=="C"], col = "pink", xlim = c(x_min, x_max), ylim = c(y_min, y_max), xaxt = "n", yaxt = "n", bty = "n")
> par(new=T)
> plot(data$Math[rownames(data)=="D"], data$Science[rownames(data)=="D"], col = "orange", xlim = c(x_min, x_max), ylim = c(y_min, y_max), xaxt = "n", yaxt = "n", bty = "n")
> par(new=T)
> plot(data$Math[rownames(data)=="E"], data$Science[rownames(data)=="E"], col = "green", xlim = c(x_min, x_max), ylim = c(y_min, y_max))
ここで、"xaxt" は、横軸を表示するかどうかを指定するオプション、"yaxt" は、縦軸を表示するかどうかを指定するオプション、"bty" は、枠線を表示するかどうかを指定するオプションです。