2012-10-03 44 views
3

我有一個數據集,記錄了三座建築物的能源使用情況。我具有可以從設置鑽石來模擬熔融數據幀:如何在ggplot中爲獨立圖層縮放顏色?

data <- melt(diamonds[,c('depth','table','cut','color')],id=c('cut','color')) 

從本質上講,我有加熱(「深度」)和冷卻(「表」)數據每個月(「切割」)從三個不同的建築物(7種顏色因素)。我想在每個月的條形圖('cut')中並排繪製三個建築物(7個「顏色」因素)。我想要表示冷卻('表')或加熱('深度')的條形根據建築物('顏色'因子)改變它們的陰影,同時按月('切')保持分組。這是鑽石數據可視化的一種不好的方式,但對於建築物來說,它們應該很好地工作,因爲它們的加熱和冷卻月份通常不會重疊。到目前爲止,我有:

p <- ggplot(data, 
     aes(color,value,group=cut)) 
p <- p + geom_bar(stat = 'identity', 
       position = 'dodge', 
       aes(fill = variable)) 
print(p) 

我試着用scale_fill_manual玩,但不能認爲一個可行的策略:

colours <- c('#0000FF', '#0033FF', '#0066FF', '#FF0000', '#FF3300', '#FF6600') 

p <- p + scale_fill_manual(values = colours, 
          group = data$variable) 

回答

6

有了一些掛羊頭賣狗肉,這是可能的。推導基於鑽石的數據集是很不錯的,但我想用一個較小的數據的工作集

set.seed(1234) 
data <- 
expand.grid(month = month.abb, 
      building = c("Building A", "Building B", "Building C"), 
      hc = c("Heating", "Cooling")) 
data$value <- rnorm(nrow(data), 60, 10) 

你要根據你的填充顏色既對變量(hc)和建築(building)所以將其設置爲該交互。

ggplot(data, aes(building,value,group=month)) + 
    geom_bar(stat = 'identity', 
      position = 'dodge', 
      aes(fill = interaction(building, hc))) 

enter image description here

我們可以選擇代表不同深淺附近的顏色,使之更喜歡你想要的東西。我使用了RColorBrewer調色板的「藍調」和「紅色」中間。

colours <- c("#FC9272", "#FB6A4A", "#EF3B2C", "#9ECAE1", "#6BAED6", "#4292C6") 
# library("RColorBrewer") 
# colours <- c(brewer.pal(9,"Reds")[4:6], brewer.pal(9,"Blues")[4:6]) 

和使用scale_fill_manual分配這些顏色。

ggplot(data, aes(building,value,group=month)) + 
    geom_bar(stat = 'identity', 
      position = 'dodge', 
      aes(fill = interaction(building, hc))) + 
    scale_fill_manual(values=colours) 

enter image description here

真正的掛羊頭賣狗肉是製作傳說少令人費解。我只列出了2個關卡(中間建築的顏色),並給他們不同的名字(和圖例的不同標題)。

ggplot(data, aes(building,value,group=month)) + 
    geom_bar(stat = 'identity', 
      position = 'dodge', 
      aes(fill = interaction(building, hc))) + 
    scale_fill_manual("Heating/cooling", 
        values=colours, 
        breaks=c("Building B.Heating", "Building B.Cooling"), 
        labels=c("Heating", "Cooling")) 

enter image description here

+0

這是很有見地!但是,每個月(或建築物)有可能是不同的顏色?然後這個梯度將被應用於每個建築物(或月)以保持一致性。這個問題更清楚嗎? –

+0

謝謝,我會接受這個答案!我只需要添加第三個交互。乾杯! –