Meniru palet warna default ggplot2

193

Fungsi apa yang dapat saya gunakan untuk mengemulasi palet warna default ggplot2 untuk jumlah warna yang diinginkan. Misalnya, input 3 akan menghasilkan vektor karakter warna HEX dengan warna-warna ini: masukkan deskripsi gambar di sini

SFun28
sumber
10
Lihatlah paket timbangan
hadley
2
Ya! Saya menyimpan cetakan display.brewer.all()di meja saya. Saya pikir saya suka Set1 yang terbaik untuk faktor.
John Colby
ide bagus! Saya akan membuat cetakan yang sama. Setuju dengan Set1, saya sudah menemukan diri saya menggunakannya di sebagian besar bagan baru saya.
SFun28

Jawaban:

267

Itu hanya berjarak sama warna di sekitar roda warna, mulai dari 15:

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

Sebagai contoh:

n = 4
cols = gg_color_hue(n)

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

masukkan deskripsi gambar di sini

John Colby
sumber
2
1 Saya seperti Anda bagus, solusi yang sederhana, meskipun saya masih mencoba untuk memahami mengapa Anda memiliki length=n+1dalam seq, sedangkan saya punyalength=n
Andrie
18
Karena 0 == 360
hadley
131

Ini adalah hasil dari

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

Ggplot empat warna

show_col(hue_pal()(3))

Ggplot tiga warna

Climbs_lika_Spyder
sumber
1
Anehnya, warna (setidaknya dalam gambar kedua) tidak cocok dengan kode RGB mereka. Namun, melihat grafik yang saya buat secara lokal, kode RGB ini benar.
Sparhawk
1
mungkin itu hal browser?
Climbs_lika_Spyder
1
Ya, sangat aneh. Di Firefox, hijau adalah # 15ba3e, di Chromium itu # 00b83a, dan setelah mengunduh gambar dan melihat dalam program gambar khusus (Gwenview) itu # 00b839. Hanya Konqueror yang menunjukkannya dengan benar sebagai # 00ba38. Jadi hanya satu yang benar, dan tidak ada yang konsisten!
Sparhawk
1
Apakah ada cara untuk mendapatkan nama warna, mis. 'Red2', 'blue3 "? Kode warna, mis. # 00b83a, sulit digunakan secara intuitif.
Sibo Jiang
2
Untuk memudahkan penyalinan dan rekatkan nilai hex adalah: # f8766d - Merah # 00ba38 - Hijau # 83b0fc - Biru
pluke
63

Semua jawaban ini sangat bagus, tetapi saya ingin membagikan hal lain yang saya temukan di stackoverflow yang sangat berguna, di sini ada tautan langsung

Pada dasarnya, @DidzisElferts menunjukkan bagaimana Anda bisa mendapatkan semua warna, koordinat, dll yang digunakan ggplot untuk membangun plot yang Anda buat. Sangat bagus!

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
Josh Morel
sumber
45

Dari halaman 106 buku ggplot2 oleh Hadley Wickham:

Skema warna default, scale_colour_hue memilih rona spasi secara merata di sekitar roda warna hcl.

Dengan sedikit rekayasa terbalik, Anda dapat membuat fungsi ini:

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)
}

Peragakan ini di barplot:

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

masukkan deskripsi gambar di sini

Andrie
sumber
2
Ini bahkan lebih sederhana dari ini. Anda dapat menghindari baris pertama aljabar karena, meskipun tidak membantu, hclmendaur ulang nilai> 360.
John Colby
13
Anda bahkan dapat menggunakan scales:::show_col(ggplotColours(n=3))untuk menampilkan warna dan nilai
Stat-R
meskipun saya belum menemukan cara untuk mendapatkan skala dan show_col untuk memuntahkan (hex atau format apa pun) nilai plotnya ...
Stefano