カラーパレット
palette()
8色
heat.colors
, topo.colors
, cm.colors
, rainbow
, terrain.colors
par(mfrow=c(2,3), mar=c(1,1,3,1))
barplot(rep(1,8), col=palette(), main="palette()", axes=F) # palette()で色名を呼び出す。
#barplot(rep(1,8), col=c(1:8), main="1:8",axes=F) # 数値でも指定できる。
barplot(rep(1,12), col=heat.colors(12), main = "heat.colors", axes=F)
barplot(rep(1,12), col=topo.colors(12), main = "topo.colors", axes=F)
barplot(rep(1,12), col=cm.colors(12), main = "cm.colors", axes=F)
barplot(rep(1,12), col=rainbow(12), main = "rainbow", axes=F)
barplot(rep(1,12), col=terrain.colors(12), main = "terrain.colors",axes=F)

色名colors
pacman::p_load("dplyr", "tidyr", "ggplot2")
# データ
d <- data.frame(matrix(c(1:length(colors()), rep(NA,3)), nrow=60)) %>%
setNames(., 1:ncol(.)) %>%
tibble::rownames_to_column("Row") %>%
tidyr::gather(., key = k, value = v, -Row) %>%
dplyr::mutate(Row = factor(Row, levels = 60:1),
k = factor(k, levels = 1:11),
v = factor(v))
# テキストの色を見やすいように変える
cex.cols <- ifelse(1:660 %in% c(grep("dark",colors()), 24,61,153:199,260:309,477,490,491), "white", "black")
# ggplot
ggcols <- ggplot2::ggplot(d, ggplot2::aes(k, Row)) +
ggplot2::geom_tile(ggplot2::aes(fill = v), colour="white") +
ggplot2::scale_fill_manual(values = colors()) +
ggplot2::theme(legend.position="none") +
ggplot2::labs(x = "", y ="") +
ggplot2::geom_text(ggplot2::aes(label= paste0(1:660, ":",c(colors(), rep("",3)))),
col=factor(cex.cols), size=1.8)
print(ggcols)

Rcolorbrewer
- 色盲対応のパレット表示は
display.brewer.all(colorblindFriendly=TRUE)
library(RColorBrewer)
# palette, colorblindFriendly
display.brewer.all(colorblindFriendly=TRUE)

# color vector
col1 <- brewer.pal(3, "Set2")[iris$Species]
col2 <- brewer.pal(3, "Dark2")[iris$Species]
# plot
par(mfrow=c(1,2))
plot(iris[,1:2], col=col1, pch=20)
plot(iris[,1:2], col=col2, pch=20)

数値の大小と色を対応させたベクトル作成
gplots
, colorRampPalette
gplots::colorpanel(n, low, mid, high)
colorRampPalette(colors)
# gplots
gr250 <- gplots::greenred(256)
br250 <- gplots::bluered(256)
cm250 <- gplots::colorpanel(n = 256, low = "deepskyblue", mid = "white", high = "violetred")
# colorRampPalette
pal1_fun <- colorRampPalette(c("green", "white", "red"))
pal2_fun <- colorRampPalette(c("dark blue", "purple", "white", "orange","dark red"))
# plot
par(mfrow = c(2,3))
barplot(rep(1,256), col=br250, border = br250, axes=F)
barplot(rep(1,256), col=gr250, border = gr250, axes=F)
barplot(rep(1,256), col=cm250, border = cm250, axes=F)
barplot(rep(1,256), col=pal1_fun(256), border = pal1_fun(256), axes=F)
barplot(rep(1,256), col=pal2_fun(256), border = pal2_fun(256), axes=F)
# color code corresponding to numeric value
x <- runif(1000, max = 1, min = -1)
ord_col <- pal2_fun(length(x))[order(order(x))]
plot(x, col=ord_col, pch =20)

tagcloud::smoothPalette
数値の大小と対応したカラーコードを作成する
library(tagcloud)
# data
set.seed(123)
x <- runif(n = 1000, min = 0, max = 100)
# color code
col3 <- smoothPalette(x, pal="Blues")
# plot
plot(x, col = col3, pch=16)

離散値化して区間ごとに割り振るcut
cut
離散値化してfactorが返る
- labelsにカラーコードを指定してas.characterすれば対応するカラーコードのベクトルが得られる.
cut(x, breaks, labels)
- 区間に対応するカラーコードの添え字にfactorを与えて作るのでも良い.
- include.lowest 最小(もし right = F なら最大)の分割点値に一致する `x[i]’ を含めるかどうか
- right 区間が右に閉じている(そして左に開いている)か否か(デフォルトでTRUE)
# data
set.seed(123)
x <- runif(n = 1000, min = 0, max = 100)
# break
br1 <- c(0,20,40,60,80,100) # 分割点
br2 <- quantile(x) # クォンタイル点で分割
# color code
x.cols1 <- as.character(cut(x, breaks=br1, labels=brewer.pal(5, "Blues"), include.lowest=F))
x.cols2 <- as.character(cut(x, breaks=br2, labels=brewer.pal(4, "Reds"), include.lowest=F))
# x.cols1 <- RColorBrewer::brewer.pal(5, "Blues")[cut(x, breaks=br1, include.lowest=F)] # これでも良い
# plot
par(mfrow =c(1,2))
plot(x, col = as.character(x.cols1), pch =16, main = "divide at specified value")
plot(x, col = as.character(x.cols2), pch =16, main = "divide at quantile")

離散値化して区間ごとに割り振るfindInterval
# value
scx <- scale(x)
# break point
br3 <- c(min(scx), -1, 0, 1, max(scx))
# findInterval
int <- findInterval(scx, br3, rightmost.closed = T, all.inside = T)
# color code
x.cols3 <- rev(brewer.pal(4, "RdYlBu"))[ int ]
# plot
plot(scx, col = x.cols3, pch =16)

squash
パッケージを使う場合
makecmap
カラーマップを作る. デフォルトでpretty
を使って区分けしている
# color palette of squash package
library(squash)
squash.palettes <- c('rainbow2', 'jet', 'grayscale', 'heat', 'coolheat', 'blueorange', 'bluered', 'darkbluered')
par(mfrow=c(3,3), mar=c(1,1,3,1))
invisible(
lapply(squash.palettes,
function(p){
sq <- makecmap(c(0, 9), colFn = get(p))$colors
barplot(rep(1,10), axes=F, col=sq, main=p)
}
)
)

cmap
makecmap
で作成したカラーマップを適応したカラーコード
hkey
,vkey
カラーキーを図に追加する
x <- runif(1000, 0, 100)
map1 <- makecmap(x, colFn = get("darkbluered")) # デフォルトでprettyを使って区分けしている
col1 <- cmap(x, map = map1)
par(mar = c(6,4,4,3))
plot(x, col = col1, pch = 16)
hkey(map1, title = 'x')
vkey(map1, title = 'x')

透過色の作成 adjustcolor
adjcols <- adjustcolor(c("red", "blue", "green"), alpha.f = 0.2)
# plotテスト
set.seed(1)
norm1 <- rnorm(1000, mean = 30, sd = 10)
norm2 <- rnorm(1000, mean = 60, sd = 10)
norm3 <- rnorm(1000, mean = 90, sd = 10)
par(mfrow=c(1,2))
lim <- range(norm1, norm2, norm3)
hist(norm1, border="transparent", breaks=50, xlab="norm", xlim = lim, col = adjcols[1])
hist(norm2, border="transparent", breaks=50, xlab=F, xlim = lim, col = adjcols[2], add=T)
hist(norm3, border="transparent", breaks=50, xlab=F, xlim = lim, col = adjcols[3], add=T)
plot(norm1, col=adjcols[1], pch=16, ylim = lim, ylab="norm"); par(new=T)
plot(norm2, col=adjcols[2], pch=16, axes = F, xlab=NA, ylab=NA); par(new=T)
plot(norm3, col=adjcols[3], pch=16, axes = F, xlab=NA, ylab=NA)

環境
sessionInfo()
## R version 3.5.1 (2018-07-02)
## Platform: x86_64-apple-darwin15.6.0 (64-bit)
## Running under: macOS Sierra 10.12.6
##
## Matrix products: default
## BLAS: /Library/Frameworks/R.framework/Versions/3.5/Resources/lib/libRblas.0.dylib
## LAPACK: /Library/Frameworks/R.framework/Versions/3.5/Resources/lib/libRlapack.dylib
##
## locale:
## [1] ja_JP.UTF-8/ja_JP.UTF-8/ja_JP.UTF-8/C/ja_JP.UTF-8/ja_JP.UTF-8
##
## attached base packages:
## [1] stats graphics grDevices utils datasets methods base
##
## other attached packages:
## [1] squash_1.0.8 tagcloud_0.6 Rcpp_1.0.0
## [4] RColorBrewer_1.1-2 bindrcpp_0.2.2 ggplot2_3.1.0
## [7] tidyr_0.8.2 dplyr_0.7.8
##
## loaded via a namespace (and not attached):
## [1] pillar_1.3.0 compiler_3.5.1 plyr_1.8.4
## [4] bindr_0.1.1 bitops_1.0-6 tools_3.5.1
## [7] digest_0.6.18 evaluate_0.12 tibble_1.4.2
## [10] gtable_0.2.0 pkgconfig_2.0.2 rlang_0.3.0.1
## [13] yaml_2.2.0 withr_2.1.2 stringr_1.3.1
## [16] knitr_1.20 caTools_1.17.1.1 gtools_3.8.1
## [19] rprojroot_1.3-2 grid_3.5.1 tidyselect_0.2.5
## [22] glue_1.3.0 R6_2.3.0 rmarkdown_1.10
## [25] pacman_0.5.0 gdata_2.18.0 purrr_0.2.5
## [28] magrittr_1.5 backports_1.1.2 scales_1.0.0
## [31] gplots_3.0.1 htmltools_0.3.6 assertthat_0.2.0
## [34] colorspace_1.3-2 KernSmooth_2.23-15 stringi_1.2.4
## [37] lazyeval_0.2.1 munsell_0.5.0 crayon_1.3.4