Open14

【R】 色

Ryota ChijimatsuRyota Chijimatsu

【色確認】

0. RStudioのスクリプト内

原稿のRStudioはR scriptやR notebook内で色名や色コードを打つだけでその色でハイライトされるようになった。



色ベクトルを作ってくれる機能を使う場合でも、dput()に渡して、色ベクトルをスクリプトにコピペしたら簡単に確認可能。


Console画面


スクリプトにコピペした結果


1. barplot()

色の数だけ1を繰り返したベクトルを作って棒グラフ作成。col引数に見たい色を入れる。

値が1の5つの棒グラフに5色を割り当てる。
barplot(rep(1,5), col = c("white","gray","black","red","blue"))


2. pie()

pie(rep(1, 100), col = terrain.colors(100))


3. scalesパッケージのshow_col()機能

scales::show_col(RColorBrewer::brewer.pal(n = 9, name = "Set1"))


4. RColorBrewerのパレットは専用コマンドが用意されている。

RColorBrewer::display.brewer.all()


5. image()

Rに初めから入っているvolcanoデータをimage機能で描画する際のcol引数に確認したい色ベクトルを入れる。

image(volcano, col = viridis::turbo(100))


6. khromaパッケージのplot_schema()機能

khroma::plot_scheme(RColorBrewer::brewer.pal(n = 9, name = "Set1"))


7. colorwayパッケージのweave_plot()機能

colorway::weave_plot(RColorBrewer::brewer.pal(n = 9, name = "Set1"))


8. colorwayパッケージのcolorspace_plot()機能

2次元の色空間に色情報をplotする。

colorway::colorspace_plot(viridis::turbo(100))

Ryota ChijimatsuRyota Chijimatsu

ggplotで使われてる色作成機能

ggColorHue <- function(n, l=65) {
  hues <- seq(15, 375, length=n+1)
  hcl(h=hues, l=l, c=100)[1:n]
  }
cols <- ggColorHue(n = 100)
barplot(rep(1,100), col = cols)

sclaesパッケージのhue_pal機能で同じ色が作れる。

scales::hue_pal()(10)

Ryota ChijimatsuRyota Chijimatsu

colorRampPaletteで色を増やす

RColorBrewerのパレットは多くても11色までしかない。

RColorBrewerのPairedパレットから11色を利用
barplot(rep(1,11), col=RColorBrewer::brewer.pal(11, "Paired"))

colorRampPalette機能を使えば、色を補完して欲しい数の色ベクトルを作ることができる。

11色しかないPairedパレットを100色まで拡張
barplot(rep(1,100), col=colorRampPalette(RColorBrewer::brewer.pal(11, "Paired"))(n=100))

Ryota ChijimatsuRyota Chijimatsu

デフォルトで入っているパレット

barplot(rep(1,100), col = topo.colors(100))

barplot(rep(1,100), col = rainbow(100))

barplot(rep(1,100), col = heat.colors(100))

barplot(rep(1,100), col = terrain.colors(100))

barplot(rep(1,100), col = cm.colors(100))

Ryota ChijimatsuRyota Chijimatsu

viridisパッケージ

library(viridis)
n = 100

パッケージ内のパレット名が関数になっており、欲しい数の色を簡単に作ることができる。

barplot(rep(1,n), col = viridis(n), main = "viridis")

barplot(rep(1,n), col = cividis(n), main = "cividis")

barplot(rep(1,n), col = plasma(n), main = "plasma")

barplot(rep(1,n), col = magma(n), main = "magma")

barplot(rep(1,n), col = inferno(n), main = "inferno")

barplot(rep(1,n), col = rocket(n), main = "rocket")

barplot(rep(1,n), col = mako(n), main = "mako")

barplot(rep(1,n), col = turbo(n), main = "turbo")

Ryota ChijimatsuRyota Chijimatsu

wesandersonパッケージ

GitHubにパレットの例が載っている。
https://github.com/karthik/wesanderson

install.packages("wesanderson")
library(wesanderson)

指定できるパレット名の確認

names(wes_palettes)

[1] "BottleRocket1" "BottleRocket2" "Rushmore1" "Rushmore" "Royal1" "Royal2"
[7] "Zissou1" "Darjeeling1" "Darjeeling2" "Chevalier1" "FantasticFox1" "Moonrise1"
[13] "Moonrise2" "Moonrise3" "Cavalcanti1" "GrandBudapest1" "GrandBudapest2" "IsleofDogs1"
[19] "IsleofDogs2"

wes_palette(パレット名, n数)のように使用する。

barplot(rep(1,5), col=wes_palette("Zissou1", n = 5))

パレットの色数は5-7色程度だが、type="continuous"とつけると色数を増やすことができる。

barplot(rep(1,100), col=wes_palette("Zissou1", n = 100, type = "continuous"))

その他のパレット
barplot(rep(1,100), col=wes_palette("BottleRocket1", n = 100, type = "continuous"))

barplot(rep(1,100), col=wes_palette("BottleRocket2", n = 100, type = "continuous"))

Rushmore
barplot(rep(1,100), col=wes_palette("Rushmore", n = 100, type = "continuous"))

Royal1
barplot(rep(1,100), col=wes_palette("Royal1", n = 100, type = "continuous"))

Royal2
barplot(rep(1,100), col=wes_palette("Royal2", n = 100, type = "continuous"))

Darjeeling1
barplot(rep(1,100), col=wes_palette("Darjeeling1", n = 100, type = "continuous"))

Darjeeling2
barplot(rep(1,100), col=wes_palette("Darjeeling2", n = 100, type = "continuous"))

Chevalier1
barplot(rep(1,100), col=wes_palette("Chevalier1", n = 100, type = "continuous"))

FantasticFox1
barplot(rep(1,100), col=wes_palette("FantasticFox1", n = 100, type = "continuous"))

Moonrise1
barplot(rep(1,100), col=wes_palette("Moonrise1", n = 100, type = "continuous"))

Moonrise2
barplot(rep(1,100), col=wes_palette("Moonrise2", n = 100, type = "continuous"))

Moonrise3
barplot(rep(1,100), col=wes_palette("Moonrise3", n = 100, type = "continuous"))

Cavalcanti1
barplot(rep(1,100), col=wes_palette("Cavalcanti1", n = 100, type = "continuous"))

GrandBudapest1
barplot(rep(1,100), col=wes_palette("GrandBudapest1", n = 100, type = "continuous"))

GrandBudapest2
barplot(rep(1,100), col=wes_palette("GrandBudapest2", n = 100, type = "continuous"))

IsleofDogs1
barplot(rep(1,100), col=wes_palette("IsleofDogs1", n = 100, type = "continuous"))

IsleofDogs2
barplot(rep(1,100), col=wes_palette("IsleofDogs2", n = 100, type = "continuous"))

Ryota ChijimatsuRyota Chijimatsu

透明度

色コードは6桁の16進数で表されるが、8桁にすると透明度を指定できる。
FFは透明度0 (不透明)。あとは99~00の数字で透明度を指定。00が透明度100%。

RColorBrewer::brewer.pal(12, "Set3")

[1] "#8DD3C7" "#FFFFB3" "#BEBADA" "#FB8072" "#80B1D3" "#FDB462" "#B3DE69" "#FCCDE5" "#D9D9D9" "#BC80BD" "#CCEBC5"
[12] "#FFED6F"

paste0で末尾に透明度のコードを追記する。

paste0(RColorBrewer::brewer.pal(12, "Set3"), "FF")

[1] "#8DD3C7FF" "#FFFFB3FF" "#BEBADAFF" "#FB8072FF" "#80B1D3FF" "#FDB462FF" "#B3DE69FF" "#FCCDE5FF" "#D9D9D9FF"
[10] "#BC80BDFF" "#CCEBC5FF" "#FFED6FFF"

不透明
scales::show_col(paste0(RColorBrewer::brewer.pal(12, "Set3"), "FF"))

透明度50
scales::show_col(paste0(RColorBrewer::brewer.pal(12, "Set3"), "50"))

透明度Max
scales::show_col(paste0(RColorBrewer::brewer.pal(12, "Set3"), "00"))

Ryota ChijimatsuRyota Chijimatsu

ggsci

ggplotのscaleシリーズに使える機能と、pal_パレット名で色ベクトルを作る機能がある。パレットは決まった色の数しかない。
https://nanx.me/ggsci/
https://cran.r-project.org/web/packages/ggsci/vignettes/ggsci.html

install.packages("ggsci")
library(ggsci)
aaasパレット
khroma::plot_scheme(pal_aaas()(10))

cosmicパレット
khroma::plot_scheme(pal_cosmic()(10))

一つのパレット機能の中にも選択肢があったり、透明度のalphaが指定できたりと選択肢が豊富

cosmicパレットのhallmarks_dark
khroma::plot_scheme(pal_cosmic(palette = "hallmarks_dark")(10))

cosmicパレットのhallmarks_darkで透明度50%
khroma::plot_scheme(pal_cosmic(palette = "hallmarks_dark", alpha = 0.5)(10))

Ryota ChijimatsuRyota Chijimatsu

shadesパッケージ

https://github.com/jonclayden/shades

shadesパッケージを使えば色の彩度、明度を簡単に修飾できる。
例えばviridisパッケージのturboパレットやRのデフォルト色は明るすぎて見づらかったりするが、shadesパッケージで調整すると良い感じになる。

このサイトが分かりやすかった。
https://hughjonesd.github.io/tweaking-colours-with-the-shades-package.html

turbo
image(volcano, col = viridis::turbo(100))

turboの彩度を落とす
image(volcano, col = saturation(viridis::turbo(100), values = 0.5))

黄緑から緑の変化がわかりやすくなった気がする。

turboの明度を落とす
image(volcano, col = brightness(viridis::turbo(100), values = 0.8))

便利なことにggplotのscaleシリーズにも直接使用できる。

scale_color_gradientnの明度を下げる
ggplot(data = iris, mapping = aes(x = Sepal.Width, y = Sepal.Length, col = Petal.Length)) + 
        geom_point() + 
        brightness(scale_color_gradientn(colours = rainbow(100)), values = 0.5)

Ryota ChijimatsuRyota Chijimatsu

gplotsパッケージ

簡単に2色のグラデーションカラーベクトルを作ることができる。

library(gplots)
n=100
par(mfrow=c(4,1))
barplot(rep(1,n), col = redgreen(n), main = "redgreen", axes = F)
barplot(rep(1,n), col = greenred(n), main = "greenred", axes = F)
barplot(rep(1,n), col = bluered(n), main = "bluered", axes = F)
barplot(rep(1,n), col = redblue(n), main = "redblue", axes = F)

Ryota ChijimatsuRyota Chijimatsu

【colorway】

https://github.com/hypercompetent/colorway

インストール

devtools::install_github("hypercompetent/colorway")

varibow()

Rでデフォルトで入っているrainbow()よりも非連続的な色パレットが作れる。

colors <- varibow(100)

scale_color_varibow()/scale_fill_varibow()も用意されており、ggplotの色修飾に使用できる。


build_palette()

中心色を指定するだけで、その色の同系色のパレットが簡単に作られる。こちらも非連続的な色パレットになっている。

red_palette <- build_palette(
  central_color = "red", 
  n_colors = 10)

返り値はリストである。リストの内、palette/colorsetで色ベクトルが取得でき、palette_plot/colorset_plot/weaveではその色ベクトルでのplotが確認できる。


value_to_colors()

数字のベクトルを渡すと、簡単に値に色を割り当てることができる。ヒートマップの凡例のような情報が簡単に作れる。

values <- c(1,4,10,17,20,35,60)
colors <- values_to_colors(values)

colorset=オプションで色ベクトルを指定可能。min_val=/max_val=オプションから割り当てる色の範囲を指定可能。

Ryota ChijimatsuRyota Chijimatsu

同系色のグラディエーション色を用意 webrパッケージのmakeSubColor()

#install.packages("devtools")
devtools::install_github("cardiomoon/webr")

メインの色と何段階に分けるかを指定するだけ

webr::makeSubColor("red",no = 10)

Ryota ChijimatsuRyota Chijimatsu

yarrrパッケージ

https://github.com/ndphillips/yarrr
https://bookdown.org/ndphillips/YaRrr/more-colors.html

幾つかの色パレットを提供している。各パレットで使用できる色数は決まっており、グラディエントな色ベクトルを作ってくれる機能は無さそう。

CRANから入手可能。

install.packages("yarrr")
library("yarrr")

全てのパレットを確認

piratepal()機能のpalette=引数で"all"を指定。

piratepal(palette = "all")

パレットの色見本

piratepal()機能のpalette=引数で特定のパレット名を指定すると、色ベクトルが得られる。plot.result=TRUEのオプションを付けると、そのパレットを使った見本画像が表示される。

piratepal(palette = "basel",
          plot.result = T)

piratepal(palette = "xmen",
          plot.result = T)


透明度

trans=引数を使用する。0が不透明で1に近づくほど透明度が増す。

piratepal(palette = "google")
piratepal(palette = "google", trans=0.5)

Ryota ChijimatsuRyota Chijimatsu

【 catecolorsパッケージ 】

4つのカラーパレットがある。離散値用である。

GitHub: https://github.com/btupper/catecolors
紹介記事: https://www.karada-good.net/analyticsr/r-318/

devtools::install_github('btupper/catecolors')
library(catecolors)


パレット確認

show_○○()で確認可能。

catecolors::show_glasbey()

catecolors::show_boynton()

catecolors::show_kelly()

catecolors::show_watlington()


パレットから色コード取得

パレット名の第一引数でパレットの色番号を指定する。何もしていなければパレット内の全ての色ベクトルが得られる。

catecolors::glasbey(index = 1)
catecolors::boynton(index = 2:10)
catecolors::kelly(index = c(1,3,5))
catecolors::watlington() # 全色



あまり使うことは無いと思うが、各パレットのLook up tableも確認できる。