プログラミング言語Rを図で分かりやすく紹介します

R図鑑

【R】散布図の作り方

2021年5月9日

概要

  • 散布図はggplot() + geom_point()
  • x軸もy軸も数値型の情報を指定
  • プロットの重なりが気になる時は透過性を効かせると良い

基本的な考え方

散布図を作成する時は基本的に ggplot() + geom_point() を使います。ggplot()でどの項目を軸に使用するかを指定しておいて、geom_point()で散布図を作成することを指示します。

散布図はggplot() + geom_point()

具体例

色々な散布図の作り方を具体例と一緒に紹介します。

基本的な散布図

まずは基本的な散布図です。ggplot()の中で使うデータフレームを指定し、さらにaes()でx軸とy軸をきちんと指定すれば散布図を作成できます。

library(ggplot2)
ggplot(data = airquality, aes(x = Wind, y = Ozone)) + 
  geom_point()

使うデータとx軸とy軸に使う列を指定すればOK

色を塗る | グループで色分け

色をグループの情報で塗り分ける方法を紹介します。散布図でプロットの色を塗る時は color で塗り分ける要素を指定します。

library(ggplot2)
ggplot(data = airquality, aes(x = Temp, y = Ozone, color = factor(Month))) + 
  geom_point()

色は 「color = 」で指定

色を塗る | 閾値で色分け

ある値を境界に色を塗り分ける例を紹介します。閾値のようなもので色を塗り分ける場合はcolorでその旨を記述すれば大丈夫です。Ozoneが100より小さいかどうかで色を塗り分ける場合は、 color = Ozone < 100 のようにして指定することができます。

library(ggplot2)
ggplot(data = airquality, aes(x = Temp, y = Ozone, color = Ozone < 100)) + 
  geom_point()

閾値で2色に塗り分ける時はcolorに条件式

透過性を効かせる

データ数が多すぎるとポイントどうしが重なってしまってわかりにくくなることがあります。

このような時は透過性を効かせることでデータがどこに集まっているかを可視化できます。透過性は alpha で指定します。

alpha は0から1で設定し、0が完全に透明で1が透過性が全く効いていない状態となります。データ数にもよりますが0.6くらいにしておくとだいたい良い感じになります。今回はデータ数が多いので0.3にしてしっかり透過性を利かせています。

library(ggplot2)
library(dplyr)
set.seed(1)
data_x = data.frame(X = rnorm(n = 1000, mean = 50, sd = 10))
data4plot = mutate(.data = data_x, 
                  Y = X + rnorm(n = 1000, mean = 5, sd = 5 ))
ggplot(data = data4plot, aes(x = X, y = Y)) + 
  geom_point(alpha = 0.3)

データが重なる時は alpha で透過

回帰直線を加える

散布図を描くと回帰直線も加えてなんらかの傾向を示したいことがあると思います。

簡単な回帰直線なら1行コードを書き足すだけで作成することができます。

回帰直線を作成するには geom_smooth()を追加します。

library(ggplot2)
library(dplyr)
set.seed(1)
data_x = data.frame(X = rnorm(n = 1000, mean = 50, sd = 10))
data4plot = mutate(.data = data_x, 
                  Y = X + rnorm(n = 1000, mean = 5, sd = 5 ))
ggplot(data = data4plot, aes(x = X, y = Y)) + 
  geom_point(alpha = 0.4) + 
  geom_smooth(method = lm, formula = y ~ x)

今回は回帰直線を計算する方法を lm とし、回帰式を y ~ x (yを目的変数、x を説明変数とする)の簡単なモデルにしています。

回帰線を追加する時は geom_smooth()

  • B!