まずは蝋の翼から。

学んだことを書きながら確認・整理するためのメモブログ。こういうことなのかな?といったことをふわっと書いたりしていますが、理解が浅いゆえに的はずれなことも多々あると思うのでツッコミ歓迎

ggpointdensityでgeom_pointの重なっている部分をヒートマップで表現する

表題通り。基本的にはドキュメントレベルしかしてないのでただのメモ。

github.com

ggpointdensityの特徴

散布図を作図するgeom_poin()では点が重なっている場合どれくらい重なっているかわからなかった。

対応策として、geom_density2d()や、geom_bin2d()が開発されたが 可視化表現が点である散布図ではなくなっている

つまり、個々の点そのものがどこにあるのか?という情報が要約されていてわからない(なんとなくの傾向はわかるが)。この解決策として、通常のgeom_point()に密度の色を塗ったようなggpointdensityができた。

f:id:chito_ng:20190901173506p:plain [ドキュメントの図]

実践

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

f:id:chito_ng:20190901174455p:plain

注意点

表示範囲指定をするときに、xlim()ylim()を使うと通常の場合と同様に、範囲外の点が除外される。
除外されることで、色が 範囲内での重なり数最大値 になるのでcoord_cartesian(xlim = ..., ylim = ...)で拡大した方が、範囲外の重なり数も加味した色になるのでベター。

おまけ

上記コード(ドキュメントのサンプルコードを少しいじったもの)で使っているviridisパッケージは、視認性の高いカラーパレットを提供するパッケージのうちのひとつとのこと。

cran.r-project.org