ggplot2のデフォルトのカラーパレットをエミュレートする


191

ggplot2のデフォルトのカラーパレットを目的の色数でエミュレートするために使用できる関数は何ですか。たとえば、3を入力すると、次の色を持つHEX色の文字ベクトルが生成されます。 ここに画像の説明を入力してください


10
スケールパッケージを見てください
ハドリー

2
うん!私display.brewer.all()は自分の机にプリントアウトを保管しています。私はSet1が一番良い要素だと思います。
John Colby

良いアイデア!同じプリントアウトを作成します。Set1については同意しましたが、新しいグラフのほとんどで使用しています。
SFun28

回答:


264

15から始まり、カラーホイールの周りにちょうど等間隔の色相です。

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

例えば:

n = 4
cols = gg_color_hue(n)

dev.new(width = 4, height = 4)
plot(1:n, pch = 16, cex = 2, col = cols)

ここに画像の説明を入力してください


2
+1私はあなたの素敵でシンプルな解決策が好きですが、私はなぜあなたがlength=n+1にいるのかを理解しようとしていますが、seq私はそうですlength=n
Andrie

18
なぜなら0 == 360
ハドリー

129

これは

library(scales)
show_col(hue_pal()(4))

4色のggplot

show_col(hue_pal()(3))

三色ggplot


1
奇妙なことに、色(少なくとも2番目の画像)はRGBコードと一致しません。しかし、私がローカルで作成したグラフを見ると、これらのRGBコード正しいです。
スパーホーク2017年

1
多分それはブラウザのものですか?
Climbs_lika_Spyder 2017年

1
はい、非常に奇妙です。Firefoxでは、緑色は#15ba3e、Chromiumでは#00b83a、画像をダウンロードして専用の画像プログラム(Gwenview)で表示すると、#00b839になります。Konquerorのみが#00ba38として正しく表示します。したがって、正しいのは1つだけで、一貫性のあるものはありません。
スパーホーク2017年

1
「red2」、「blue3」などのカラー名を取得する方法はありますか?カラーコード(#00b83aなど)を直感的に使用するのは困難です
Jiang

2
コピーと貼り付けを容易にするために、16進数の値は次のとおりです。#f8766d-赤#00ba38-緑#83b0fc-青
pluke

62

これらの答えは、すべて非常に良いですが、私は実際にはかなり便利ですstackoverflowの上で発見された別のものを共有したいと思った、ここにあるの直接リンクは、

基本的に、@ DidzisElfertsは、ggplotが作成したプロットを構築するために使用するすべての色、座標などを取得する方法を示します。非常に素晴らしい!

p <- ggplot(mpg,aes(x=class,fill=class)) + geom_bar()
ggplot_build(p)$data
[[1]]
     fill  y count x ndensity ncount  density PANEL group ymin ymax xmin xmax
1 #F8766D  5     5 1        1      1 1.111111     1     1    0    5 0.55 1.45
2 #C49A00 47    47 2        1      1 1.111111     1     2    0   47 1.55 2.45
3 #53B400 41    41 3        1      1 1.111111     1     3    0   41 2.55 3.45
4 #00C094 11    11 4        1      1 1.111111     1     4    0   11 3.55 4.45
5 #00B6EB 33    33 5        1      1 1.111111     1     5    0   33 4.55 5.45
6 #A58AFF 35    35 6        1      1 1.111111     1     6    0   35 5.55 6.45
7 #FB61D7 62    62 7        1      1 1.111111     1     7    0   62 6.55 7.45

45

Hadley Wickhamによるggplot2ブックの106ページから:

デフォルトの配色であるscale_colour_hueは、hclカラーホイールの周りに等間隔に配置された色相を選択します。

少しリバースエンジニアリングを行うと、この関数を作成できます。

ggplotColours <- function(n = 6, h = c(0, 360) + 15){
  if ((diff(h) %% 360) < 1) h[2] <- h[2] - 360/n
  hcl(h = (seq(h[1], h[2], length = n)), c = 100, l = 65)
}

これをbarplotで示す:

y <- 1:3
barplot(y, col = ggplotColours(n = 3))

ここに画像の説明を入力してください


2
これよりもさらに簡単です。それは助けにはないのですが、あなたは、以来、代数の最初の行を回避することができますhcl> 360の値をリサイクル
ジョン・コルビー

13
を使用scales:::show_col(ggplotColours(n=3))して色と値を表示することもできます
Stat-R

スケールとそのshow_colを取得して、プロットする(16進数またはその他の形式)値を吐き出す方法はまだわかりませんが
Stefano
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.