散布図は二つのデータの関係を把握するために利用される基本的なグラフです。散布図は相関関係の把握や単回帰分析の際によく使われます。
Packages and Datasets
本ページではR version 3.4.4 (2018-03-15)の標準パッケージ以外に以下の追加パッケージを用いています。
Package | Version | Description |
---|---|---|
tidyverse | 1.2.1 | Easily Install and Load the ‘Tidyverse’ |
car | 3.0.2 | Companion to Applied Regression |
maptools | 0.9.4 | Tools for Reading and Handling Spatial Objects |
また、以下のデータセットを用います。
Dataset | Package | Version | Description |
---|---|---|---|
iris | datasets | 3.4.4 | Edgar Anderson’s Iris Data |
mtcars | datasets | 3.4.4 | Motor Trend Car Road Tests |
標準パッケージを用いる方法
標準パッケージを用いて箱ひげ図を描くにはplot
関数を用います。plot
関数は様々なグラフを描くことが可能ですがx
、y
オプションにデータを指定すると自動的に散布図が指定されます。明示的に散布図を指定したい場合はtype
オプションに"p"
を指定してください。なお、formula
形式でデータを指定することも可能です。
plot(iris$Sepal.Length, iris$Sepal.Width, type = "p")
追加パッケージを用いる方法
ggplot2
パッケージ以外にも散布図を描くのに便利な関数がありますので、これらも含めて紹介します。
周辺箱ひげ図付き散布図
car
パッケージのcar::scatterplot
関数は R Commander で散布図を描く際に呼び出されている関数です。特徴は両軸に箱ひげ図(周辺箱ひげ図)を描がける点です。ただし、car
パッケージのv3.0-0版では引数名などがv2.1-6から大きく変わっていますので注意してください。
car::scatterplot(Sepal.Width ~ Sepal.Length, data = iris)
ただし、デフォルトでは上図のように回帰線なども描かれてしまいますので必要に応じてオプションで描画しないように設定してください。
散布図
ggplot2
パッケージではggplot2::geom_point
関数を用いることで散布図を描くことができます。
iris %>%
ggplot2::ggplot(ggplot2::aes(x = Sepal.Length, y = Sepal.Width)) +
ggplot2::geom_point()
層別散布図
car::scatterplot
関数は層別の散布図を描くことも可能です。ここでは分かりやすくするために回帰線などは描いていません。
car::scatterplot(Sepal.Width ~ Sepal.Length, data = iris, groups = iris$Species,
regLine = FALSE, smooth = FALSE)
ggplot2::geom_point
関数で層別表示を行うにはggplot2::aes
関数を用いて色を変える場合はcolour
オプションを層別でマーカの形を変える場合はshape
オプションを指定してください。
iris %>%
ggplot2::ggplot(ggplot2::aes(x = Sepal.Length, y = Sepal.Width)) +
ggplot2::geom_point(ggplot2::aes(colour = Species, shape = Species))
散布図と回帰線
散布図は前述のように相関関係や回帰分析の際に利用されますので回帰線も描ける必要があります。
car::scatterplot
関数ではデフォルトで回帰直線を描けますが明示的に指定する場合はregLine
オプションを指定してください(v2.1-6ではreg.line
オプションです)。なお、v3.0-0では散布図を層別描画するためのgroups
オプションを指定し回帰直線を層別描画させないようにby.groups = FALSE
を指定すると散布図が正しく描けないようですので注意してください。
car::scatterplot(Sepal.Width ~ Sepal.Length, data = iris, smooth = FALSE)
ggplot2
パッケージで回帰線を描くためにはggplot2::geom_point
関数に加えてggplot2::geom_smooth
関数を用います。デフォルトでは回帰線の計算方法は自動選択になっていますので回帰直線を描きたい場合はにはmethod
オプションに"lm"
を指定してください。
iris %>%
ggplot2::ggplot(ggplot2::aes(x = Sepal.Length, y = Sepal.Width)) +
ggplot2::geom_point(ggplot2::aes(colour = Species, shape = Species)) +
ggplot2::geom_smooth(method = "lm", se = FALSE)
散布図と層別の回帰線
car::scatterplot
関数は層別の回帰線も描けます。groups
オプションが指定されていると自動的に層別の回帰線を描きますが明示的に指定したい場合はby.groups
オプションをTRUE
に指定してください。
car::scatterplot(Sepal.Width ~ Sepal.Length, data = iris, by.groups = TRUE,
groups = iris$Species, smooth = FALSE)
ggplot2
パッケージで層別の回帰線を描にはggplot2::aes
関数の指定位置を変更するのが簡単です。
iris %>%
ggplot2::ggplot(ggplot2::aes(x = Sepal.Length, y = Sepal.Width,
colour = Species, shape = Species)) +
ggplot2::geom_point() +
ggplot2::geom_smooth(method = "lm", se = FALSE)
ラベルを表示する
散布図はデータの数が多いことが多くどのデータか識別するためにテキストラベル(以降、ラベルと表記)を表示したいことがあります。ラベル表示は追加パッケージを用いると比較的簡単にできます。
car::scatterplot(mpg ~ hp, data = mtcars, smooth = FALSE, boxplots = FALSE)
with(mtcars, maptools::pointLabel(x = hp, y = mpg,
labels = row.names.data.frame(mtcars),
col = "red", cex = 0.75))
ggplot2
パッケージではggplot2::geom_text
関数またはggplot2::geom_label
関数を用います。
mtcars %>%
tibble::rownames_to_column("label") %>%
ggplot2::ggplot(ggplot2::aes(x = wt, y = mpg, colour = as.factor(cyl))) +
ggplot2::geom_point(size = 3) +
ggplot2::geom_text(ggplot2::aes(label = label))
mtcars %>%
tibble::rownames_to_column("label") %>%
ggplot2::ggplot(ggplot2::aes(x = wt, y = mpg, colour = as.factor(cyl))) +
ggplot2::geom_point(size = 3) +
ggplot2::geom_label(ggplot2::aes(label = label))