ちょっとハマったのでメモ。
色々やってみたけど、smoothPaletteが楽だった。
方法1 : 値の並び順に色を対応させる
# 一様分布の乱数
test_unif <- runif(1000)
# 正規分布の乱数
test_norm <- rnorm(1000)
color_unif1 <- cm.colors(length(test_unif))
color_unif1 <- color_unif1[rank(test_unif)]
color_norm1 <- cm.colors(length(test_norm))
color_norm1 <- color_norm1[rank(test_norm)]
# 一様分布
png(file="Unif1.png")
plot(test_unif, col=color_unif1, pch=16, ann=F)
dev.off()
# 正規分布
png(file="Norm1.png")
plot(test_norm, col=color_norm1, pch=16, ann=F)
dev.off()
一様分布しているようなデータなら、このやり方でもいいかもしれないが、山なりの分布になるようなデータの場合、山の部分に中間色が集中して、それ以外は強い色になってしまう。
並び順ではなく値の大小と色を対応させたい。
方法2 : smoothPaletteで値の大小と色を対応させる
library("tagcloud")
color_unif2 <- smoothPalette(-test_unif, pal="RdBu")
color_norm2 <- smoothPalette(-test_norm, pal="RdBu")
# 一様分布
png(file="Unif2.png")
plot(test_unif, col=color_unif2, pch=16, ann=F)
dev.off()
# 正規分布
png(file="Norm2.png")
plot(test_norm, col=color_norm2, pch=16, ann=F)
dev.off()
このやり方だと、簡単に値と色が対応する。
ただし、smoothPaletteが対応しているpal(例 : YlOrRdとかSpectralとか)しか対応していない。
例えば、RdBuは小さい値が赤、大きい値が青で、感覚と逆で気持ち悪い(smoothPalette(-test_unif, pal="RdBu")で逆転させたが)。
どの色からどの色へと変化させるかも自分で自由に定義したい。
方法3 : palfuncを指定する(colorRampPaletteの返り値を渡す)
color_unif3 <- smoothPalette(test_unif, palfunc=colorRampPalette(c("skyblue", "gray", "pink")))
color_norm3 <- smoothPalette(test_norm, palfunc=colorRampPalette(c("skyblue", "gray", "pink")))
color_unif4 <- smoothPalette(test_unif, palfunc=colorRampPalette(cm.colors(12), alpha=TRUE))
color_norm4 <- smoothPalette(test_norm, palfunc=colorRampPalette(cm.colors(12), alpha=TRUE))
# 一様分布
png(file="Unif3.png")
plot(test_unif, col=color_unif3, pch=16, ann=F)
dev.off()
# 正規分布
png(file="Norm3.png")
plot(test_norm, col=color_norm3, pch=16, ann=F)
dev.off()
# 一様分布
png(file="Unif4.png")
plot(test_unif, col=color_unif4, pch=16, ann=F)
dev.off()
# 正規分布
png(file="Norm4.png")
plot(test_norm, col=color_norm4, pch=16, ann=F)
dev.off()
これなら、自分な好きな色を始点、中間点、終点に指定して書ける。
参考
http://www.inside-r.org/packages/cran/tagcloud/docs/smoothPalette
http://stat.biopapyrus.net/graph/rcolorbrewer.html
http://www.slideshare.net/takehisayamakita/rainbowrcolorbrewercolorramppalette