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


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


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


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

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


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.