LoginSignup
13
13

More than 5 years have passed since last update.

連続量データに対するグラデーションのある色付け

Last updated at Posted at 2015-10-08

ちょっとハマったのでメモ。

色々やってみたけど、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()

Unif1.png
Norm1.png

一様分布しているようなデータなら、このやり方でもいいかもしれないが、山なりの分布になるようなデータの場合、山の部分に中間色が集中して、それ以外は強い色になってしまう。

並び順ではなく値の大小と色を対応させたい。

方法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()

Unif2.png
Norm2.png

このやり方だと、簡単に値と色が対応する。

ただし、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()

Unif3.png
Norm3.png

Unif4.png
Norm4.png

これなら、自分な好きな色を始点、中間点、終点に指定して書ける。

参考
http://www.inside-r.org/packages/cran/tagcloud/docs/smoothPalette
http://stat.biopapyrus.net/graph/rcolorbrewer.html
http://www.slideshare.net/takehisayamakita/rainbowrcolorbrewercolorramppalette

13
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
13