以前の日記で少し前フリしていた色の話。の続き。
- 色は視認性が高いグラフを書くときに大切な要素
- 色の多用は、グラフの本質を隠してしまう
- 人が理解できる限界は3~4色じゃないだろうか
と、思ってます。
- Rを起動すると、grDevicesパッケージが読み込まれていると思います。
> sessionInfo() R version 2.14.1 (2011-12-22) Platform: i686-pc-linux-gnu (32-bit) locale: [1] LC_CTYPE=ja_JP.UTF-8 LC_NUMERIC=C [3] LC_TIME=ja_JP.UTF-8 LC_COLLATE=ja_JP.UTF-8 [5] LC_MONETARY=ja_JP.UTF-8 LC_MESSAGES=ja_JP.UTF-8 [7] LC_PAPER=C LC_NAME=C [9] LC_ADDRESS=C LC_TELEPHONE=C [11] LC_MEASUREMENT=ja_JP.UTF-8 LC_IDENTIFICATION=C attached base packages: [1] stats graphics grDevices utils datasets methods base
こんな感じと思う。
で、grDevicesパッケージには色の関数関数がある。
- rainbows関数
虹色のセットで、引数nでグラデーションをつけます。
> rainbow(n=7) # n=7の場合は虹の7色になる [1] "#FF0000FF" "#FFDB00FF" "#49FF00FF" "#00FF92FF" "#0092FFFF" "#4900FFFF" [7] "#FF00DBFF" > rainbow(n=14) # 引数nの数で虹色が連続値で分割される [1] "#FF0000FF" "#FF6D00FF" "#FFDB00FF" "#B6FF00FF" "#49FF00FF" "#00FF24FF" [7] "#00FF92FF" "#00FFFFFF" "#0092FFFF" "#0024FFFF" "#4900FFFF" "#B600FFFF" [13] "#FF00DBFF" "#FF006DFF" > > jpeg("rainbow.jpg") > layout(1:2) > par(mai=c(.8,.1,.4,.4)) > dat <- matrix(rep(1,7)) > barplot(dat,horiz=TRUE,col=rainbow(n=7),xaxt="n",main="rainbow(n=7)") > gridtext(label=rainbow(n=7),at=cumsum(dat)-.5,rot=-60) > dat <- matrix(rep(1,14)) > barplot(dat,horiz=TRUE,col=rainbow(n=14),xaxt="n",main="rainbow(n=14)") > gridtext(label=rainbow(n=14),at=cumsum(dat)-.5,rot=-60) > dev.off()
で、こんな感じ*1。
- heat.colors関数
暖色系のセット。同じく引数nを持ちます。
値が小 -> 大で、色は赤 -> 淡い黄色になります。
> heat.colors(n=10) [1] "#FF0000FF" "#FF2400FF" "#FF4900FF" "#FF6D00FF" "#FF9200FF" "#FFB600FF" [7] "#FFDB00FF" "#FFFF00FF" "#FFFF40FF" "#FFFFBFFF" > > jpeg("heat.colors.jpg",height=240) > par(mai=c(.8,.1,.4,.4)) > dat <- matrix(rep(1,10)) > barplot(dat,horiz=TRUE,col=heat.colors(n=10),xaxt="n",main="heat.colors(n=10)") > gridtext(label=heat.colors(n=10),at=cumsum(dat)-.5,rot=-60) > dev.off()
- terrain.colors関数
緑 -> 黄 -> クリーム色 -> 白のグラデーション(大地の色?)。同じく引数nを持ちます。
> terrain.colors(n=10) # 値が小 -> 大で、色は赤 -> クリーム色になる [1] "#00A600FF" "#2DB600FF" "#63C600FF" "#A0D600FF" "#E6E600FF" "#E8C32EFF" [7] "#EBB25EFF" "#EDB48EFF" "#F0C9C0FF" "#F2F2F2FF" > > jpeg("terrain.colors.jpg",height=240) > par(mai=c(.8,.1,.4,.4)) > dat <- matrix(rep(1,10)) > barplot(dat,horiz=TRUE,col=terrain.colors(n=10),xaxt="n",main="terrain.colors(n=10)") > gridtext(label=terrain.colors(n=10),at=cumsum(dat)-.5,rot=-60) > dev.off()
- topo.colors関数
紫 -> 青 -> 緑 -> 黄 -> クリーム色のグラデーション(天文系の色?)。同じく引数nを持ちます。
> topo.colors(n=10) [1] "#4C00FFFF" "#0019FFFF" "#0080FFFF" "#00E5FFFF" "#00FF4DFF" "#4DFF00FF" [7] "#E6FF00FF" "#FFFF00FF" "#FFDE59FF" "#FFE0B2FF" > > jpeg("terrain.colors.jpg",height=240) > par(mai=c(.8,.1,.4,.4)) > dat <- matrix(rep(1,10)) > barplot(dat,horiz=TRUE,col=topo.colors(n=10),xaxt="n",main="topo.colors(n=10)") > gridtext(label=terrain.colors(n=10),at=cumsum(dat)-.5,rot=-60) > dev.off()
- cm.colors関数
シアン -> 白 -> マゼンタのセット。同じく引数nを持ちます。
> cm.colors(n=10) [1] "#80FFFFFF" "#99FFFFFF" "#B2FFFFFF" "#CCFFFFFF" "#E6FFFFFF" "#FFE6FFFF" [7] "#FFCCFFFF" "#FFB2FFFF" "#FF99FFFF" "#FF80FFFF" > > jpeg("terrain.colors.jpg",height=240) > par(mai=c(.8,.1,.4,.4)) > dat <- matrix(rep(1,10)) > barplot(dat,horiz=TRUE,col=cm.colors(n=10),xaxt="n",main="cm.colors(n=10)") > gridtext(label=cm.colors(n=10),at=cumsum(dat)-.5,rot=-60) > dev.off()
- gray関数, gray.colors関数
グレーグラデーション。
grayは0~1の比率でグラデーションを指定、gray.colorsは引数nで等間隔のグラデーションを作る。
-
- gray関数
> gray(1:10/10) [1] "#1A1A1A" "#333333" "#4C4C4C" "#666666" "#808080" "#999999" "#B2B2B2" [8] "#CCCCCC" "#E6E6E6" "#FFFFFF" > gray(c(1,1,3,3,3,5,5,5,9,10)/10) [1] "#1A1A1A" "#1A1A1A" "#4C4C4C" "#4C4C4C" "#4C4C4C" "#808080" "#808080" [8] "#808080" "#E6E6E6" "#FFFFFF" > > jpeg("gray.jpg") > layout(1:2) > par(mai=c(.8,.1,.4,.4)) > dat <- matrix(rep(1,10)) > barplot(dat,horiz=TRUE,col=gray(1:10/10),xaxt="n",main="gray(1:10/10)") > gridtext(label=gray(1:10/10),at=cumsum(dat)-.5,rot=-60) > > barplot(dat,horiz=TRUE,col=gray(c(1,1,3,3,3,5,5,5,9,10)/10),xaxt="n" + ,main="gray(c(1,1,3,3,3,5,5,5,9,10)/10)") > gridtext(label=gray(c(1,1,3,3,3,5,5,5,9,10)/10),at=cumsum(dat)-.5,rot=-60) > dev.off()
-
- gray.colors関数
> gray.colors(n=10) # gray(1:10/10)と少し色目が違う [1] "#4C4C4C" "#6C6C6C" "#838383" "#969696" "#A7A7A7" "#B5B5B5" "#C3C3C3" [8] "#CFCFCF" "#DBDBDB" "#E6E6E6" > > jpeg("gray.colors.jpg",height=240) > par(mai=c(.8,.1,.4,.4)) > dat <- matrix(rep(1,10)) > barplot(dat,horiz=TRUE,col=gray.colors(n=10),xaxt="n",main="gray.colors(n=10)") > gridtext(label=gray.colors(n=10),at=cumsum(dat)-.5,rot=-60) > dev.off()
で、こんな感じ。
単調グラデーションを使うなら、gray.colorsの方が圧倒的に便利と思う。
色調も少しやさしい気がする。
- blues9関数
青系のグラデーション。引数はない。
> blues9 [1] "#F7FBFF" "#DEEBF7" "#C6DBEF" "#9ECAE1" "#6BAED6" "#4292C6" "#2171B5" [8] "#08519C" "#08306B" > > jpeg("blues9.jpg",height=240) > par(mai=c(.8,.1,.4,.4)) > dat <- matrix(rep(1,9)) > barplot(dat,horiz=TRUE,col=blues9,xaxt="n",main="blues9") > gridtext(label=blues9,at=cumsum(dat)-.5,rot=-60) > dev.off()
で、こんな感じ。
"Blues9"。かっこいい名前の関数だなぁ。
今日はたくさん書いて疲れました。