2016-01-05 21 views
5

geom_boxplot satırları, bıyıklar ve aykırı noktaları fill aşağıdaki plotta atanan aynı alpha mirasını almanın bir yolu var mı? Renk estetik çizgiler, bıyıkları ve aykırı değer noktalarının rengini belirler: orada ggplot2 içinde bunu yapmak için doğal bir yol, ama burada bir hacky şekilde eğergeom_boxplot: map alfa düzeylerini bıyık ve aykırı değerler için

+0

Daha önce bugün bu soruya [http://stackoverflow.com/questions/34601194/change-colours-to-defined-palette-for-ggplot-objects] bakabilirsiniz. – mtoto

cevap

3

emin değilim. Bu yüzden arsaya renk estetiği ekleyeceğiz. Ancak renkleri manuel olarak, renk tanımlarında alfa değerleri dizisini içerecek şekilde ayarlayacağız. Sonuç olarak, alfa değerlerini renk estetiğine etkili bir şekilde ekliyoruz. Estetiği Species ile eşleştirdim, böylece gösterim için üç farklı alfa düzeyine sahip olabilirim ve alfa değerlerinin daha iyi kontrastı için theme_bw() ekledim.

İlk olarak, son grafikte istediğiniz alfa değerlerini ayarlayın:

numVals = length(unique(iris$Species)) 
avals = seq(0.9, 0.3, length.out=numVals) 

İşte beygir: siyaha tüm renkleri ayarla, ancak renk tanımına alfa düzeyinde dizisini ekleyin. Bunun için, alfa düzeylerini 0 - 255 ölçeğinde onaltılık değere dönüştürmeliyiz. 255 ölçek - kodda

avalsHex = paste0("#000000", toupper(as.hexmode(round(avals*255)))) 

yukarıda avals*255 0 alfa seviyeleridir. as.hexmode, bu değerleri onaltılık değere dönüştürür. toupper kesinlikle gerekli değil, ancak ben büyük harflerle onaltılık renk tanımlarını görmeye alışkınım. Daha sonra, iki basamaklı onaltılı alfa değerini, rengin sonuna, yani bu durumda alfa değerleri içeren üç renge sahip bir vektör veren siyah ( #000000) yapıştırırız.

renk ve alfa estetik ve her estetik için manuel değerler hem Hayır biz arsa:

ggplot(iris, aes(x = Species, y = Sepal.Length)) + 
    geom_boxplot(aes(color=Species, alpha = Species)) + 
    scale_alpha_manual(values = avals) + 
    scale_colour_manual(values = avalsHex) 

enter image description here

GÜNCELLEME: Yorumunuzu ele almak için, buraya farklı renklerle bir örnek alpha değerlerine ekleme:

avalsHex = paste0(c("#FF0000","#00FF00","#0000FF"), toupper(as.hexmode(round(avals*255)))) 

Ardından aynı çizim kodunu çalıştırın:

enter image description here

GÜNCELLEME 2: renkler düşünmek bana bile alfa değerlerine eklemek için onaltılık dönüşüm gerekmez fark ettirdi. Örneğin, hcl renklerle bunu yapabilirsiniz:

# Black boxplots with 3 different alpha levels 
scale_colour_manual(values = hcl(0,0,0, alpha=avals)) 

# Colored boxplots with 3 different alpha levels 
scale_colour_manual(values=hcl(seq(15,375,length.out=4)[1:3], 100, 65, alpha=avals)) 

hcl fonksiyon sizin için dönüşüm bakımı aslında, her renk için hexdecimal kodunu döndürür.

+0

korktuğum gibi hacky! Farklı dolgu renkleri olan bir vektöre sahip olsaydım (yani, # # 000000'den başlamıyor), bu yöntem hala çalışıyor mu?(pardon, ilk cümle daha önce yayınlandı) – mdlincoln

+0

Peki, ggplot'un dilbilgisinin ruhunu koruyor, ancak çalışmasını sağlamak için normal ggplot iş akışının dışına çıkmak zorundasınız. – eipi10

+1

Yorumunuzun geri kalanına cevap vermek için: Evet. İstediğiniz herhangi bir alfa düzeyini, onaltılık iki ek sayı ekleyerek onaltılık bir renkte tarayabilirsiniz. Basit bir örnek için güncellemeye bakın. – eipi10

İlgili konular