2013-02-28 17 views
21

Ben fark burada Box and whiskers plot çağrı olun:ggplot faktörü renkleri değiştiriliyor mu?

p + geom_boxplot(aes(fill = factor(cyl))) 

ederken kutudiyagramlar için parlak kırmızı/yeşil/mavi renk, dolgu oluşturur:

p + geom_boxplot(aes(fill = factor(vs))) 

renklerin ayrı bir soluk yeşil/kırmızı üretir. verilerim, ben renklerin ikinci set almak gibi, ama ilk seti (istiyorum kullanır ggplot ve bunu nasıl değiştirebileceğinizi?

Teşekkür

renk set kontrol neyi

p + geom_boxplot(aes(fill = factor(cyl))) 

yılında

cevap

29

varsayılan renkleri eşit renk çarkında tonları aralıklı Buna here den nasıl üretildiğini kontrol edebilirsiniz

Siz bu renklerle scale_fill_manual kullanabilirsiniz:..

p + scale_fill_manual(values=c("#F8766D", "#00BA38")) 

Renkleri almak için cyl numaralı telefondan ggplot_build(p)$data'u kullandım.

Alternatif olarak, şöyle de bir başka palet kullanabilirsiniz:

p + scale_fill_brewer(palette="Set1") 

Ve paletteki renkleri bulmak için yapabileceğiniz:

require(RColorBrewer) 
brewer.pal(9, "Set1") 

Kontrol paketi paletleri bilerek için ve ilgileniyorsanız diğer seçenekler.

Düzenleme: Zaten üstündeki bağlantısını işaret olarak user248237dfsf @, @Andrie bu fonksiyon renkler oluşturulan gösterir:

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

> ggplotColours(2) 
# [1] "#F8766D" "#00BFC4" 

> ggplotColours(3) 
# [1] "#F8766D" "#00BA38" "#619CFF" 

oluşturulan iki renk bakarsak Birincisi aynı, ama n = 2 ve n = 3 olduğunda ikinci renk aynı değildir. Bunun nedeni, eşit aralıklı renk tonları oluşturmasıdır. vs için cyl için renkleri kullanmak istiyorsanız, scale_fill_manual ayarını yapmanız ve bu işlevden n = 3 ile oluşturulan bu renkleri kullanmanız gerekir.

p1 <- ggplot(mtcars, aes(factor(cyl), mpg)) + 
      geom_boxplot(aes(fill = factor(cyl))) 

p2 <- ggplot(mtcars, aes(factor(cyl), mpg)) + 
      geom_boxplot(aes(fill = factor(vs))) 

Şimdi bunu yaparsanız:

ggplot_build(p1)$data[[1]]$fill 
# [1] "#F8766D" "#00BA38" "#619CFF" 

ggplot_build(p2)$data[[1]]$fill 
# [1] "#F8766D" "#00BFC4" "#F8766D" "#00BFC4" "#F8766D" 

Bu ggplotColours kullanarak oluşturulan renkler görüyoruz

bu yaparsın neler gerçekten olduğunu doğrulamak için Farkın nedeni de açıktır. Umarım bu yardımcı olur.

+2

Ama bir değişken için bir faktör olarak çizilen bu yüzden renklerin kümesi olsun açıklamaz ve farklı biri için renklerin başka bir set gibi olsun: Bu geom_point() için yararlıdır bağlı olduğum doküman sayfası. Renkler eşit aralıklı, bunu görebiliyorum, ama ikisi arasında neden farklı? İlk ikincisine benzemesini istiyorum. – user248237dfsf

+0

Renk tonu üzerindeki her renk arasındaki adımları manuel olarak ayarlayabilmek güzel olurdu. Böylece ardışık faktörler arasında daha büyük bir karşıtlık elde edebiliriz. 360'dan sonra sadece 0'dan devam etmelidir. – JohannesNE

5

önceki cevaplara ekleme:

(yerine fill arasında) col estetiğini kullanırken, scale_color_manual kullanın.

myColors <- c("#56ddc5", "#ff3db7", "#4699dd") 
ggplot(mtcars, aes(x=mpg, y=hp, col=as.factor(cyl))) + 
    geom_point() + 
    scale_color_manual(values=myColors) 

enter image description here