2013-11-21 28 views
5

y-ekseni değerinin bir fonksiyonu olarak renk barplot:ggplot2: I (veri + barplot) bu basit kod

# Palette 
LtoM <-colorRampPalette(c('red', 'yellow')) 
Mid <- "snow3" 
MtoH <-colorRampPalette(c('lightgreen', 'darkgreen')) 
: Aşağıdaki palet kullanan bir ısı haritası oluşturuldu Diğer yandan
dat <- c('Jan','Feb','Mar', 'Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec') 
val <- c(-2.5, 3, 2.5, -3.3, -1, 0.2, 6, 4.3, 5.5, 2, -1.9, -2.3) 
df <- data.frame(dat, val) 
bar <- ggplot(data = df, aes(x = factor(dat, levels = month.abb), y = val)) + 
    geom_bar(stat = 'identity') 
print(bar) 

tarafından çağrılan

:

scale_fill_gradient2(low = LtoM(100), mid = Mid, high = MtoH(100)) 

Şimdi ben co istiyorum, my barplot için benzer bir renk paleti kullanmak istiyorum her çubuğun içindeki lor, yüksekliğin bir fonksiyonu (maksimum y için yeşilden en az y'ye kadar olan bazı dereceler).

Bunu nasıl yapabilirim, lütfen?

cevap

3

Temel olarak geçerli kodunuz var. Sadece scale_fill_gradient işlevini ekleyin.

custom colors

bar <- ggplot(data = df, aes(x = factor(dat, levels = month.abb), y = val, 
       fill=val)) + 
     geom_bar(stat = 'identity') + 
     scale_fill_gradient2(low=LtoM(100), mid='snow3', 
     high=MtoH(100), space='Lab') 

Ancak scale_fill_gradient2 gradyan-ing bakım sağlayan oldukça iyi

bar <- ggplot(data = df, aes(x = factor(dat, levels = month.abb), y = val, 
       fill=val)) + 
     geom_bar(stat = 'identity') + 
     scale_fill_gradient2(low='red', mid='snow3', high='darkgreen', space='Lab') 

generated colors

+0

lilster yanıtlarken için teşekkür çalışır. aslında ilk grafiğini nasıl alacağımı biliyordum, ama tam olarak neyle uğraştığımı değil. val = -2 iken tüm çubukların val = 5 (ve aralarında bir renk skalası) olduğunda 'kırmızı' ve 'yeşil' olmasını istiyorum. temsil ettiği değere bağlı olarak her çubuğun renkli (tekdüze) olması farklıdır. Umarım şimdi biraz daha açıkım – tagoma

+0

Burada daha fazla ayrıntıya ihtiyacım var. 'Tüm çubukların val = -2 olmasını istiyorum' = kırmızı 've' yeşil 'iken val = 5 (ve renk skalası arasında).' Gönderdiğim her iki grafik de bunu tatmin ediyor gibi görünüyor. ', temsil ettiği değere bağlı olarak her çubuğun renkli (tekdüze) olmasını farklı kılar. <- Bu farklı, ama cevaplarımda, renkler hiçbiri aynı renkte değil. Ölçek dolgu eğimi, minimum değerin "en kırmızı", en yüksek değerin "en yeşil" olması ve daha sonra aralarında bir renk skalası olacak şekilde ayarlandı. Bunun ne aradığınızı farklı olarak anlatabilir misiniz, belki bir görüntü dosyasıyla birlikte ataşe – lilster

+0

merhaba lilster sabrınız için teşekkürler :) bu şeye benzemek istiyorum: http: //www.quinn-curtis .com/QCChar96.jpg görüyorsunuz, herhangi bir y değerinde tüm çubuklar aynı renktedir ve renk y değerinin bir işlevidir. – tagoma