ggpointdensityでgeom_pointの重なっている部分をヒートマップで表現する
表題通り。基本的にはドキュメントレベルしかしてないのでただのメモ。
ggpointdensityの特徴
散布図を作図するgeom_poin()
では点が重なっている場合どれくらい重なっているかわからなかった。
対応策として、geom_density2d()
や、geom_bin2d()
が開発されたが 可視化表現が点である散布図ではなくなっている。
つまり、個々の点そのものがどこにあるのか?という情報が要約されていてわからない(なんとなくの傾向はわかるが)。この解決策として、通常のgeom_point()
に密度の色を塗ったようなggpointdensity
ができた。
[ドキュメントの図]
実践
adjust
オプションで割り当てられる色を変更できる模様。デフォルトの範囲は(重なり数の最小値 ~ 重なり数の最大値)なので最大範囲を何倍するかを指定できる模様。
library(ggplot2) library(dplyr) library(viridis) library(ggpointdensity) library(patchwork) dat <- bind_rows( tibble(x = rnorm(7000, sd = 1), y = rnorm(7000, sd = 10), group = "foo"), tibble(x = rnorm(3000, mean = 1, sd = .5), y = rnorm(3000, mean = 7, sd = 5), group = "bar")) g1 = ggplot(data = dat, mapping = aes(x = x, y = y)) + geom_pointdensity() + scale_color_viridis() # adjust = 1.0 g2 = ggplot(data = dat, mapping = aes(x = x, y = y)) + geom_pointdensity(adjust = 2.0) + scale_color_viridis() g3 = ggplot(data = dat, mapping = aes(x = x, y = y)) + geom_pointdensity(adjust = 0.5) + scale_color_viridis() g1 | g2 | g3
注意点
表示範囲指定をするときに、xlim()
やylim()
を使うと通常の場合と同様に、範囲外の点が除外される。
除外されることで、色が 範囲内での重なり数最大値 になるのでcoord_cartesian(xlim = ..., ylim = ...)
で拡大した方が、範囲外の重なり数も加味した色になるのでベター。
おまけ
上記コード(ドキュメントのサンプルコードを少しいじったもの)で使っているviridis
パッケージは、視認性の高いカラーパレットを提供するパッケージのうちのひとつとのこと。