2012-10-16 15 views
14

Sıfırın altındaki değerlerin kırmızıyla doldurulması ve yukarıdakilerin koyu mavi olması için, aşağıdaki çizelgeyi ayarlamak istedim. Bunu ggplot2 ile nasıl yapabilirim?ggplot2 içinde özel dolgu renklerini işaret olarak ayarlayın

mydata = structure(list(Mealtime = "Breakfast", Food = "Rashers", `2002` = 9.12, 
          `2003` = 9.5, `2004` = 2.04, `2005` = -20.72, `2006` = 18.37, 
          `2007` = 91.19, `2008` = 94.83, `2009` = 191.96, `2010` = -125.3, 
          `2011` = -18.56, `2012` = 63.85), .Names = c("Mealtime", "Food", "2002", "2003", "2004", "2005", "2006", "2007", "2008","2009", "2010", "2011", "2012"), row.names = 1L, class = "data.frame") 
x=ggplot(mydata) + 
    aes(x=colnames(mydata)[3:13],y=as.numeric(mydata[1,3:13]),fill=sign(as.numeric(mydata[1,3:13]))) + 
    geom_bar(stat='identity') + guides(fill=F) 
print(x) 

cevap

18

verilerinizi yapısı yolu ggplot2 nasıl olması gerektiği değil:

require(reshape) 
mydata2 = melt(mydata) 

Temel barplot:

ggplot(mydata2, aes(x = variable, y = value)) + geom_bar() 

enter image description here

hüner şimdi eklemektir değerin negatif mi yoksa p olduğunu belirten ek bir değişken ostive:

mydata2[["sign"]] = ifelse(mydata2[["value"]] >= 0, "positive", "negative") 

..ve (renkler için scale_fill_* ile birlikte) ggplot2 çağrısında kullanan:

ggplot(mydata2, aes(x = variable, y = value, fill = sign)) + geom_bar() + 
    scale_fill_manual(values = c("positive" = "darkblue", "negative" = "red")) 

enter image description here

+1

Parlak. Teşekkür ederim. scale_fill_manual, aradığım şeydi. Verileri eritmek ve yeniden yazmakla ilgili noktanızı alıyorum. Ben dput ile tembelleşiyordum(). Bu hala benim clunkier kodumla çalışır + scale_fill_manual (değerler = c ("1" = "koyu mavi", "- 1" = "kırmızı")) 'ancak çok daha az erişilebilir bir analiz yapar. –

+0

Normalde vektörleri estetik olarak kullanmazsınız. Estetik, değişkenlerinizin (bir data.frame'deki sütunlar) arsadaki eksenlere eşleştirilmesidir. –