2017-02-17 186 views
1

我創建了2個條形圖,第一個高度是我想用不同顏色顯示的3個值的總和。我可以創建如圖所示的情節:結合堆積和並排條形圖

library(reshape) 
library(ggplot2) 
data1 <- data.frame("Year" = c(2011, 2012, 2013, 2014, 2015, 2016), 
         "Item1" = c(47.3, 46.3, 49.9, 50.1, 50.9, 47.2), 
         "Item2" = c(26.9, 58.9, 2.0, 11.5, 11.5, 5.3), 
         "Item3" = c(25.8, 24.9, 24.9, 25.4, 25.3, 25.6)) 
mdata <- melt(data1, id.var = "Year") 
plot(ggplot(mdata, aes(x = Year, y = value, fill = variable)) + 
    geom_bar(stat = "identity")) 

我的第二個情節更容易,只是一個酒吧的價值決定了酒吧的高度。代碼生成情節是:

data2 <- data.frame("Year" = c(2011, 2012, 2013, 2014, 2015, 2016), 
         "Value" = c(85.1, 83.4, 86.9, 87.6, 88.4, 85.6)) 
plot(ggplot(data2, aes(x = Year, y = Value)) + 
    geom_bar(stat = "identity")) 

我想顯示在同一地塊一側這兩杆側,因此,2011年被分組,2012年分組,等我想不出如何添加第二個圖。任何幫助?謝謝!

+1

只是爲了澄清,你正在尋找沿x軸的年份,並且每年你會喜歡2個酒吧:一個酒吧是3個值的總和,一個是單個酒吧?如果這是正確的,那麼需要將這3個值分解爲不同的顏色,或者是否足以將總和顯示爲一個條? – BLT

+0

@BLT請參閱:http://stackoverflow.com/questions/11604070/issue-with-ggplot2-geom-bar-and-position-dodge-stacked-has-correct-y-values#11620735,似乎我們可以'同時擁有'position ='dodge''和''stack'',這是有道理的。那個答案很古老,我不知道的東西可能已經改變 – GGamba

+0

@GGamba是的,這是基本相同的問題,我的答案是「試圖在繪圖之前先聚合項目#」。 – BLT

回答

0

感謝大家的反饋。基於這些答案,我選擇稍微改變我的方法,並使用線圖代替第二個條形圖。這傳達了相同的信息,只是不是我原本想要的。再次感謝!

0

您可以添加分組列並根據離散比例繪製它們。

data3 <- merge(data1, data2, by = 'Year') 
data3 <- melt(data3, id.var = 'Year') 
data3$gr <- paste0(data3$Year, ifelse(data3$variable == 'Value', '.b', '.a')) 

ggplot(data3, aes(x = gr, y = value, fill = variable)) + 
    geom_col() 

或者使用dplyr,如果你想管就直接通過

data1 %>% full_join(data2) %>% 
    gather(Item, value, -Year) %>% 
    mutate(gr = paste0(Year, ifelse(Item == 'Value', '.b', '.a'))) %>% 

    ggplot(aes(x = gr, y = value, fill = Item)) + 
    geom_col() 

這會給繪圖躲閃的外觀,同時疊加。但是,一個缺點是Y軸上的標籤反映了分組變量而不是年份。我以前試過改變這些,但還沒有弄明白。

enter image description here