2017-06-23 93 views
1

我想創建一個具有三個不同圖例的堆疊barplot,用於不同的數據分組。多個傳說中的barplot填充ggplot

例如,給出以下數據框:

Year <- as.factor(c(rep(1, 10), rep(2, 10), rep(3,10), rep(4,10), rep(5,10), rep(6,10))) 
Category <- as.factor(c(rep("a", 15), rep("b", 10), rep("c", 10), rep("d",10), rep("e", 10), rep("f", 5))) 
Region <- as.factor(c(rep("region1", 25), rep("region2", 20), rep("region3",15))) 
data <- data.frame(Year, Category, Region) 

我想繪製逐年每個類別的計數堆疊barplot。

ggplot() + geom_bar(data=data,aes(x=Year, fill=Category)) 

然而,而不必爲類別(如上面)一個傳奇,我想通過地區有三個傳說與類別的子集(即標題爲「REGION1」會顯示「A」類和「b」的傳說;標題爲「region2」的圖例將顯示類別「c」和「d」;標題爲「region3」的圖例將顯示類別「e」和「f」。 Legends for multiple fills in ggplotR: Custom Legend for Multiple Layer ggplot。 但是,我沒有運氣將它們應用到一個barplot。任何幫助將不勝感激!

回答

0

有時你可以通過將圖層映射到額外的美學,然後使用override.aes來使這些美學的傳說看起來像你希望的那樣,以「硬」的方式做這種事情。這並不漂亮。

下面是一個例子,其中該圖例fill抑制和圖例經由colorsizealpha爲三個「區域」的子集製備。

首先,獲取ggplot2顏色爲6種顏色如here

gg_color_hue = function(n) { 
    hues = seq(15, 375, length = n + 1) 
    hcl(h = hues, l = 65, c = 100)[1:n] 
} 

cols = gg_color_hue(6) 

三個外來geom_point層只包括添加的三個傳說的情節;通過將size設置爲0或color爲NA來抑制實際點。

,然後又有guide_legend的雜亂的工作,其中每一個傳說改爲顯示基於上述cols正確的色彩。圖例名稱已更改,圖例順序已設置。

ggplot(data = data, aes(x = Year)) + 
    geom_bar(aes(fill = Category), show.legend = FALSE) + 
    geom_point(data = subset(data, Category %in% c("a", "b")), 
       aes(color = Category), stat = "count", size = 0) + 
    geom_point(data = subset(data, Category %in% c("c", "d")), 
       aes(size = Category), stat = "count", color = NA) + 
    geom_point(data = subset(data, Category %in% c("e", "f")), 
       aes(alpha = Category), stat = "count", size = 0) + 
    guides(color = guide_legend(title = "Region 1", order = 1, 
           override.aes = list(shape = 15, size = 5, color = cols[1:2])), 
      size = guide_legend(title = "Region 2", order = 2, 
           override.aes = list(shape = 15, size = 5, color = cols[3:4])), 
      alpha = guide_legend(title = "Region 3", order = 3, 
           override.aes = list(shape = 15, size = 5, color = cols[5:6], alpha = 1))) + 
    theme(legend.key = element_rect(fill = "white")) 

enter image description here

+0

謝謝 - 很欣賞的幫助! – Powege

0

什麼類似的東西:

ggplot() + geom_bar(data=data,aes(x=Year, fill=Category, color=Region)) + scale_fill_brewer(palette="Greens") + scale_color_manual(values = c("red", "black", "grey"))

與scale_color_manual進行定製。你可以從http://colorbrewer2.org/#type=sequential&scheme=BuGn&n=3得到靈感