ねこすたっと

ねこの気持ちと統計について悩む筆者の備忘録的ページ。

カラーパレットで色を指定する(RColorBrewer, viridis, ggsciパッケージ)[R]

グラフの色は色覚異常がある人でも見分けやすい配色が必要。また、センス良く色を組み合わせるのは(私にとっては)難しいので、用意されているカラーパレットから選ぶのが無難。

ここではggplotのscaleレイヤーとして指定できるカラーパレットをいくつか紹介する。
まずは2つのプロット例を準備しておく。

1つ目はdiamondsデータの一部を使って、caratpriceの関係をcut別に表示する。離散型パレットの例示に使う。

q1 <- diamonds %>% sample_n(size = 1000, seed = 1234) %>%
  ggplot(aes(x = carat, y = price, colour = cut, fill = cut)) +
  geom_smooth(alpha = 0.1) + 
  geom_point(alpha = 0.3) +
  theme_bw()

2つ目は2次元正規分布データの密度を六角形密度プロットで表示する。連続型パレットの例示に使う。

library(hexbin)
q2 <- data.frame(x = rnorm(1000), y = rnorm(1000)) %>%
  ggplot(aes(x = x, y = y)) +
  geom_hex() + 
  theme_bw()

グレースケールで描く

線の色(引数colorで指定)についてはscale_color_*()を、塗りつぶしの色(引数fillで指定)はscale_fill_*()を指定する(以下、共通)。

離散型ではscale_color_grey(), scale_fill_grey()を使う。

q1 + scale_color_grey() +
  scale_fill_grey()

図1:離散型グレースケールで描いた

連続型ではscale_color_gradient(), scale_fill_gradient()を使う。このレイヤーではlowhighで色の両端を指定して、その間でグラデーションをつけてくれる。

q2 + scale_fill_gradient(low = "grey", high = "black")

図2:連続型グレースケールで描いた

他にもscale_*_gradient2midも指定できる)やscale_*_gradient(パレットの全体を通したグラデーションを作成できる)もある。

RColorBrewerパッケージ

まずはパッケージを読み込んで指定できるパレットを確認。ここではcolorblindFriendly = TRUEと指定して、色覚バリアフリーなパレットのみ表示する。

library(RColorBrewer)
display.brewer.all(colorblindFriendly = TRUE)

図3:RColorBrewerで指定できるパレット

パレットは次の3段に分けて表示される。

  1. 順次的(sequential):小・少→大・多のように順序のある段階を表すのに使う
  2. 定性的(qualitative):大小関係のないカテゴリーを表すのに使う
  3. 発散的(diverging):正負の両方向にのびるデータを表すのに使う

例えばSet2パレットを指定したいときは、引数palette = "Set2"と指定する。

q1 + scale_colour_brewer(palette="Set2") +
  scale_fill_brewer(palette="Set2")

図4:RColorBrewerパッケージのSet2を指定した

viridisパッケージ

指定できる引数は以下のとおり。

  • option:8種類のカラーパレットから指定
    • "magma"または"A"
    • "inferno"または"B"
    • "plasma"または"C"
    • "viridis"または"D":デフォルト
    • "cividis"または"E"
    • "rocket"または"F"
    • "mako"または"G"
    • "turbo"または"H"
  • discrete:離散型のパレットを使用するときは=TRUE、連続型のパレットを使用するときは=FALSE(デフォルト)。
  • direction:連続型パレットを使用するときに配色の向きを逆にしたいときは=-1とする
q1 + scale_colour_viridis(option = "viridis", discrete = TRUE) +
  scale_fill_viridis(option = "viridis", discrete = TRUE)

図5:viridisパッケージのviridisを指定した

q2 + scale_fill_viridis(option = "inferno", discrete = FALSE, direction = 1)

図6:viridisパッケージのinfernoを指定した

ggsciパッケージ

有名科学雑誌で使用されている配色っぽいパレットを指定できる。

Nature Publishing Groups

10色まで。

q1 + scale_colour_npg() +
  scale_fill_npg()

図7:Nature Publishing Groups

The New England Journal of Medicine (NEJM)

8色まで。

q1 + scale_colour_nejm() +#8-color
  scale_fill_nejm()

図8:The New England Journal of Medicine

Lancet

9色まで。

q1 + scale_colour_lancet() +
  scale_fill_lancet()

図9:Lancet

The Journal of the American Medical Association (JAMA)

7色まで。

q1 + scale_colour_jama() +
  scale_fill_jama()

図10:The Journal of the American Medical Association

Journal of Clinical Oncology

10色まで。

q + scale_colour_jco() +
  scale_fill_jco() 

図11:Journal of Clinical Oncology

色を選んで連続型パレットを使用する

19色を指定できる:
red, pink, purple, deep-purple, indigo, blue, light-blue, cyan, teal(=小さい鴨, 青と緑の間), green, light-green, lime, yellow, amber(琥珀色), orange, deep-orange, brown, grey, blue-grey

q2 + scale_fill_material("cyan", reverse = TRUE)

図12:シアンを使った連続型パレット

おわりに

  • scale_colour_, scale_fill_の両方を使う
  • grayとスペルミスしてしまうのはきっと某ロックバンドのせい
  • 循環型の水飲み皿を買ったらすごくよく飲んでくれるようになりました。

参考資料

oku.edu.mie-u.ac.jp