Ggplot2 varsayılan renk paletini taklit et


192

İstediğiniz sayıda renk için ggplot2'nin varsayılan renk paletini taklit etmek için hangi işlevi kullanabilirim. Örneğin, 3 girişi, bu renklerle HEX renklerinin bir karakter vektörünü üretir: resim açıklamasını buraya girin


10
Terazi paketine bakın
Hadley

2
Evet! display.brewer.all()Masamın çıktısını saklıyorum . Sanırım Set1'i faktörler için en iyisi olarak seviyorum.
John Colby

İyi bir fikir! Aynı çıktıyı yapacağım. Set1 üzerinde anlaştığım gibi, kendimi yeni tablolarımın çoğunda kullanırken buldum.
SFun28

Yanıtlar:


267

15'ten başlayarak renk tekerleği çevresinde eşit aralıklı tonlar:

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

Örneğin:

n = 4
cols = gg_color_hue(n)

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

resim açıklamasını buraya girin


2
Senin güzel gibi 1 I basit bir çözüm, Hala neden anlamaya çalışıyorum rağmen length=n+1içinde seqben var iken,length=n
ANDRIE

18
Çünkü 0 == 360
hadley

131

Bunun sonucu

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

Dört renk ggplot

show_col(hue_pal()(3))

Üç renk ggplot


1
İşin tuhafı, renkler (en azından ikinci resimde) RGB kodlarıyla eşleşmiyor. Ancak, ben yerel olarak yapılmış olduğu bir grafik görünümlü, bu RGB kodları vardır doğru.
Sparhawk

1
belki bir tarayıcı şey?
Climbs_lika_Spyder

1
Evet, çok garip. Firefox'ta yeşil # 15ba3e, Chromium'da # 00b83a ve resmi indirip özel bir görüntü programında (Gwenview) görüntüledikten sonra # 00b839. Sadece Konqueror bunu # 00ba38 olarak doğru gösteriyor. Yani sadece biri haklı ve hiçbiri tutarlı değil!
Sparhawk

1
Renk adını almanın herhangi bir yolu var mı, örneğin 'red2', 'blue3 "? Renk kodunu, örneğin # 00b83a, sezgisel olarak kullanmak zor.
Sibo Jiang

2
Kopyalama ve yapıştırma kolaylığı için onaltılık değerler şunlardır: # f8766d - Kırmızı # 00ba38 - Yeşil # 83b0fc - Mavi
pluke

62

Bu cevapların hepsi çok iyi, ama stackoverflow'da keşfettiğim başka bir şeyi gerçekten çok kullanışlı paylaşmak istedim, işte doğrudan bağlantı

Temel olarak, @DidzisElferts, ggplot'un oluşturduğunuz bir grafiği oluşturmak için kullandığı tüm renkleri, koordinatları vb. Nasıl alabileceğinizi gösterir. Çok hoş!

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'ın ggplot2 kitabının 106. sayfasından:

Varsayılan renk düzeni olan scale_colour_hue, hcl renk tekerleği etrafında eşit aralıklı tonlar alır.

Biraz tersine mühendislik ile bu işlevi inşa edebilirsiniz:

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

Bunu barplot'ta gösterme:

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

resim açıklamasını buraya girin


2
Bundan daha da basit. İlk cebir satırından kaçınabilirsiniz, çünkü yardımda olmasa da, hcldeğerleri> 360 geri dönüştürür.
John Colby

13
scales:::show_col(ggplotColours(n=3))Rengi ve değerleri görüntülemek için bile kullanabilirsiniz
Stat-R

Henüz ölçekleri ve show_col'unu (hex veya başka bir formatta) tükürmek için nasıl elde edeceğimi bilmememe rağmen ...
Stefano
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.