R: plot 関数を使った散布図の作り方
UB3/informatics/r/r_plot
このページの最終更新日: 2024/09/30関連ページ
- 散布図のシンボルに legend を追加する → legend() 関数のページ へ
広告
概要: 散布図と R の plot 関数
散布図 scatter plot とは、2 つの変数を X 軸と Y 軸にプロットした下のような図である。2 つの変数の関係を視覚的に理解することができるので、年齢と身長、店舗数と売り上げのような 2 つの連続変数データがある場合には、「どんな解析をするにせよ、まず最初に作ってみる」と言われるほど重要な図である。
このページでは、R の plot 関数を使った散布図の作り方をまとめる。散布図は以下のような解析とも関係が深いので、必要に応じてリンク先を参照のこと。
ピアソンおよびスピアマンの相関検定は R の cor.test 関数 のページにまとめている。
plot の基本的な使い方
trees という 組み込みのデータセット を使って作成。31 本の木について、胴回り Girth、高さ Height、容積 Volume が収められている。
plot(trees$Volume,trees$Height)
で散布図ができる。つまりベクター x および y を用いた plot (x,y) という形が基本である。
plot に含められるパラメーターには、以下のようなものがある (1)。実際の使用例はこんな感じ。
main |
グラフタイトルを指定。main = "Scatter plot" |
cex.main |
タイトルのフォントサイズを指定。cex.main = 3 |
cex |
シンボルのサイズを指定。デフォルトは 1 で、0.5, 2 のように指定する。数値はデフォルトサイズに対する倍率である。 |
cex.lab |
x 軸および y 軸ラベルのフォントサイズを指定。 |
font.lab |
x 軸および y 軸ラベルのフォントを指定。font.lab = 5 のように数字で指定する。 |
xlab, ylab |
x 軸および y 軸のラベルを指定。xlab = "Percent increase" |
xlim, ylim |
x 軸および y 軸の範囲を指定。xlim = c(0,10) のようにベクターで指定する。 |
xaxs, yaxs |
xaxs="i" と yaxs="i" を同時に指定すると X 軸と Y 軸がそれぞれの最小値で交わるようになる。 |
asp |
x と y のアスペクト比を指定。グラフを正方形にするオプションかと思ったが違った。x 軸と y 軸の範囲が同じになる。asp = 1 なお、図を正方形にしたい場合は、plot の前に par(pty="s") を実行しておく。 |
type |
シンボルや線などを指定。何もプロットしない n は意味がないように思えるが、文字をプロットする 場合にはこれを使う。
|
col |
シンボルの色を指定。col="blue" とすると、シンボルの線が青に変わる。塗りつぶしたいときは、pch を使ってシンボルを 19 に指定。 |
lty |
線のタイプを指定。lty = 1 のように指定する。0 線なし、1 実線、2 破線、3 点線、4 一点鎖線、5 長い破線、6 長い一点鎖線。 |
pch |
シンボルの種類を番号で指定。pch = "3" のように " " で指定すると、数字の 3 がプロットされる。pch = 3 のようにすると、以下の図からシンボルが選ばれる。この図は ggpubr というパッケージに含まれており、パッケージをインストール後に ggpubr::show_point_shapes() で出すことができる (参考)。 |
plot の散布図に直線・曲線を追加する
さまざまな方法がある。もっとも簡単なのは abline() 関数を使う方法である。
- 変数 X および Y の散布図を plot(A, B) で作成。
- ここに追加する直線・曲線の式は回帰分析で出す。lm 関数 のページを参照のこと。reg1 = lm(Y ~ X) として、lm の結果を reg1 に保存する。
- abline(reg1) で、散布図に回帰曲線が追加される。
lines を使うか、curve を使って add="TRUE" とする方法もある。信頼区間を含める方法など、詳細は 散布図に回帰曲線を追加する を参照のこと。
シンボルをグループによって色分けする
いくつか方法がある。
par で重ね書きする
par 関数は、上書き指定をする関数である。以下のように、1 つ目の散布図のあとに par(new = T) で重ね書きを指定し、2 つ目の散布図を重ね書きできる。
par(new = T)
plot(X2, Y2, col = "red", pch = 16)
例では X1, Y1 を黒でプロットし、X2, Y2 を赤でプロットするように指定している。ただし、この方法には
xlim, ylim で軸の範囲を揃える必要がある。さらに、このままでは軸ラベルが両方の散布図で書かれるので、重なって表示されてしまう。X2, Y2 の方を xlab = "", ylab = "" のように軸ラベル非表示の設定にする必要がある。
文字をプロットする
plot で type n を指定することで図を作り、そこに text で行名をプロットできる。
この場合、plot の input は一つのデータフレームでないといけない模様。plot(mtcars$mpg, mtcars$hp) で図を作ると、うまく表示されなかった。
広告
References
コメント欄
サーバー移転のため、コメント欄は一時閉鎖中です。サイドバーから「管理人への質問」へどうぞ。