グラフの色は色覚異常がある人でも見分けやすい配色が必要。また、センス良く色を組み合わせるのは(私にとっては)難しいので、用意されているカラーパレットから選ぶのが無難。
ここではggplotのscaleレイヤーとして指定できるカラーパレットをいくつか紹介する。
まずは2つのプロット例を準備しておく。
1つ目はdiamondsデータの一部を使って、caratとpriceの関係を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()

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

他にもscale_*_gradient2(midも指定できる)やscale_*_gradient(パレットの全体を通したグラデーションを作成できる)もある。
RColorBrewerパッケージ
まずはパッケージを読み込んで指定できるパレットを確認。ここではcolorblindFriendly = TRUEと指定して、色覚バリアフリーなパレットのみ表示する。
library(RColorBrewer) display.brewer.all(colorblindFriendly = TRUE)

パレットは次の3段に分けて表示される。
- 順次的(sequential):小・少→大・多のように順序のある段階を表すのに使う
- 定性的(qualitative):大小関係のないカテゴリーを表すのに使う
- 発散的(diverging):正負の両方向にのびるデータを表すのに使う
例えばSet2パレットを指定したいときは、引数palette = "Set2"と指定する。
q1 + scale_colour_brewer(palette="Set2") + scale_fill_brewer(palette="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)

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

ggsciパッケージ
有名科学雑誌で使用されている配色っぽいパレットを指定できる。
Nature Publishing Groups
10色まで。
q1 + scale_colour_npg() + scale_fill_npg()

The New England Journal of Medicine (NEJM)
8色まで。
q1 + scale_colour_nejm() +#8-color scale_fill_nejm()

Lancet
9色まで。
q1 + scale_colour_lancet() + scale_fill_lancet()

The Journal of the American Medical Association (JAMA)
7色まで。
q1 + scale_colour_jama() + scale_fill_jama()

Journal of Clinical Oncology
10色まで。
q + scale_colour_jco() + scale_fill_jco()

色を選んで連続型パレットを使用する
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)

おわりに
scale_colour_,scale_fill_の両方を使う- grayとスペルミスしてしまうのはきっと某ロックバンドのせい
- 循環型の水飲み皿を買ったらすごくよく飲んでくれるようになりました。
参考資料
ggsciパッケージの説明(CRAN):Scientific Journal and Sci-Fi Themed Color Palettes for ggplot2
viridisパッケージの説明(CRAN):Introduction to the viridis color maps
RColorBrewerパッケージの説明(CRAN):CRAN - Package RColorBrewer
奥村先生のホームページより「統計グラフの色」:
