日々のつれづれ

不惑をむかえ戸惑いを隠せない男性の独り言

色の話・その6

以前の日記で少し前フリしていた色の話。の続き。

  • 色は視認性が高いグラフを書くときに大切な要素
  • 色の多用は、グラフの本質を隠してしまう
  • 人が理解できる限界は3~4色じゃないだろうか

と、思ってます。

grDevicesパッケージの話が終わったので、2つの色パッケージの話。
RColerBrewerパッケージdichromatパッケージについて。

インドさんにコメントいただきました。嬉しい限りです。なので、RColorBrewerパッケージから。

RColorBrewerパッケージはその名の通り、ColorBrewerのRパッケージです。
ColorBrewerは視認性の高い配色を念頭においたカラーパレットです。

SIS 7.0では『ColorBrewer』というカラーセットが追加されました。『ColorBrewer』はCynthia A. Brewerが考案したカラーパレットで、目に優しい配色で、色の区分が明瞭になるように工夫されています。このカラーセットには、35種類もの色味があり、それぞれ3〜12段階の色が設定してあります。個別値やレンジなど色分けできる主題図で『ColorBrewer』のさまざまな色味から選択して、多彩な主題図表現ができます。図1は、『ColorBrewer』を使った主題図表現のご紹介として、市区町村別の昼間人口をもとに4種類の色味のレンジ主題図を設定しました。テーマに応じて色味を使い分けることができます。

『ColorBrewer』でキレイな地図

brewer.pal関数がColorBrewerに従ったカラーパレットを作ります。
display.brewer.pal関数、display.brewer.all関数は、brewer.palのカラーセットをディスプレイするだけの関数で、brewer.pal.info関数は「?brewer.pal」と同じ動作と思う。
カラーパレットはbrewer.pal関数の引数nameで指定できる。
ColorBrewerは視認性の違いから3つのカテゴリに分けられる

  • Sequential palettes

連続したパレットで色の強さの順に並ぶ。主に、淡い色は小さい値、濃い色は大きい値といった印象を与える。グラデーションの段階を決める引数nは3〜9まで。

name カラー name カラー
YlOrRd 黄 -> オレンジ -> 赤 PuBu 紫 -> 青
YlOrBr 黄 -> オレンジ -> 茶 OrRd オレンジ -> 赤
YlGnBu 黄 -> 緑 -> 青 Oranges オレンジのグラデーション
YlGn 黄 -> 緑 Greys グレーのグラデーション
Reds 赤のグラデーション Greens 緑のグラデーション
RdPu 赤 -> 紫 GnBu 緑 -> 青
Purples 紫のグラデーション BuPu 青 -> 紫
PuRd 紫 -> 赤 BuGn 青 -> 緑
PuBuGn 紫 -> 青 -> 緑 Blues 青のグラデーション
  • Qualitative palettes

色相の間に関連性がないパレットでクラス間の違いを強めたいときに使う。名義データやカテゴリデータに使える。引数nは最大値が決まっていて、nが最大値以下の時は途中までの色が利用される。

name nの数 name nの数
Set3 12 Pastel1 9
Set2 8 Paired 12
Set1 9 Dark2 8
Pastel2 8 Accent 8
  • Diverging palettes

中央から順に両端に向かって色が発散するパレット。淡い値を中央値に入れてデータを区分したり、コントラストをつけて低い値と高い値を強調したりする。

name カラー name カラー
Spectral 光のスペクトル PuOr オレンジ -> 白 -> 紫
RdYlGn 赤 -> 黄 -> 緑 PRGn 紫(?) -> 白 -> 緑
RdYlBu 赤 -> 黄 -> 青 PiYG ピンク -> 黄緑
RdGy 赤 -> 白 -> グレー BrBG 茶 -> 青緑
RdBu 赤 -> 白 -> 青
> library(RColorBrewer)
> jpeg("displaybrewerpalall.jpg",height=720) # これで一覧がわかる
> display.brewer.all()
> dev.off()

で、こんな感じ。

一つだけのパレットを見たいときはこう。

> jpeg("displaybrewerpal.jpg")
> layout(matrix(1:9,ncol=3))
> par(mai=c(.8,.2,.1,.2))
> display.brewer.pal(name="YlOrRd",n=3)
> display.brewer.pal(name="YlOrRd",n=6)
> display.brewer.pal(name="YlOrRd",n=9)
> 
> display.brewer.pal(name="Spectral",n=3)
> display.brewer.pal(name="Spectral",n=5)
> display.brewer.pal(name="Spectral",n=11)
> 
> display.brewer.pal(name="Set3",n=3)
> display.brewer.pal(name="Set3",n=6)
> display.brewer.pal(name="Set3",n=12)
> dev.off()

で、こんな感じ。

実際に使うときはこんな感じかな?

> dat <- matrix(sample(6,8,replace=TRUE),nrow=4)
> colnames(dat) <- c("hoge","fuga")
> 
> jpeg("brewerpal.jpg")
> par(mai=c(.8,.8,.8,1.2))
> par(xpd=FALSE)
> barplot(dat,beside=TRUE,col=brewer.pal(name="Paired",n=4))
> par(xpd=TRUE) # グラフの外を指定する
> legend(x=par()$usr[2],y=par()$usr[4],legend=sapply(LETTERS[1:2],paste,1:2)
+ ,pch=22,lty=0,pt.bg=brewer.pal(name="Paired",n=4),pt.cex=2)
> dev.off()

で、こんな感じ。

ちなみに、ColorBrewerはこの本にも紹介があります。

The Map Reader: Theories of Mapping Practice and Cartographic Representation

The Map Reader: Theories of Mapping Practice and Cartographic Representation