J

統計データをggplot2で可視化するときの色

背景

統計的にデータを扱う場合,データの種類は大きく分けて次の3つ.

  • 順次的(sequential)
  • 定性的(qualitative)
  • 発散的(diverging)

これらを可視化するとき,色分けすると便利.ただし,色使いには注意が必要

目的

ggplot2で可視化するとき,データの種類によって色を使い分ける方法を模索

方法

ggplot2で色を分けて可視化するときの手段として

  1. ggplot2のscale_gradient, scale_gradient2, scale_gradientn を利用
  2. RパッケージのRColorBrewerを利用
  3. 自分で定義

の3つが考えられる.
ここで問題.適切な色とは何か?
W. S. Cleveland の The Elements of Graphing Data によれば,CMYKをベースに考えて次のパタンがオススメらしい

順次的データ
cyan から magenta への濃淡で表す
定性的データ
cyan,magenta,green,orange,light blue の5色で表す

さて,cyanやmagentaの色一覧は次の通り

(c,m,y,k) #rrggbb 色名
(1,0,0,0) #00a0e9 cyan
(0,1,0,0) #e4007f magenta
(1,0,1,0) #009944 green
(0,0.5,1,0) #f39800 orange
(1,0.5,0,0) #0068b7 light blue

これらを利用して,ggplot2で色を分けてみる.

実験

まずは色の定義

cCyan <- "#00a0e9"
cMagenta <- "#e4007f"
cGreen <- "#009944"
cOrange <- "#f39800"
cLightBlue <- "#0068b7"
qcolours <- c(cCyan,cMagenta,cGreen,cOrange,cLightBlue)
順次的データ

data=mtcarsを利用する.まずはそのままプロット(背景は白に設定).

p <- ggplot(mtcars, aes(mpg, wt)) 
p <- p + geom_point(aes(colour=cyl),size=3)
p <- p + theme_bw(24)
p

f:id:joker1110:20111202215040p:image:w360
次に,Clevelandの色設定を適用

p + scale_colour_gradient(low=cCyan,high=cMagenta)

f:id:joker1110:20111202215038p:image:w360
見やすくなったかな.
また他の方法として,奥村先生の色設定を適用する

p + scale_colour_gradient(low=cLightBlue,high=cOrange)

f:id:joker1110:20111202215037p:image:w360
となり,さらに見やすくなった.
個人的には,奥村先生の方法が最も良い.

定性的データ

data=diamondsを小さくしたdsmallを利用する.まずはそのままプロット.

dsmall <- diamonds[sample(nrow(diamonds), 100), ] 
p <- ggplot(dsmall, aes(carat, price))
p <- p + geom_point(aes(colour=cut),size=3)
p <- p + theme_bw(24)
p

f:id:joker1110:20111202215036p:image:w360
これにClevelandの方法を適用する

p + scale_colour_manual(aes(cut), value = qcolours)

f:id:joker1110:20111202215034p:image:w360
メリハリが明確で良い感じ.

結論

Clevelandの方法のように色分けを工夫することで,可視化データの情報がよりハッキリと見て取れる!

参考文献