2016-11-16 18 views
1

我想添加一個堆積條到閃躲的條形圖,顯示總數。我不希望總數的列成爲實心條,而是由堆疊的組件組成。 我可以將兩個geom_bars添加到該圖中,但我無法移動總欄。我可以在中間添加一個虛擬類別爲零,但當然我更希望總數位於組件的右側。閃回的條形圖與堆棧總數

df=data.frame(
    treatment=rep(c("Impact","Control")), 
    type=rep(c("Phylum1","Phylum2"),each=2), 
    total=c(2,3,4,5)) 

ggplot(df,aes(y=total,x=treatment,fill=type)) + 
    geom_bar(position= position_dodge(),stat="identity", alpha = 0.9, width = 0.25) + 
    geom_bar(position = position_stack(), stat = 'identity', alpha = 0.3, width = 0.125) 

not precisely what I want

This是不是他們想要的堆棧/由兩個變量閃避同樣的問題。我只是想總結相同的信息兩次,但不同。

我當然可以爲實心總量添加一個條,並手動放入堆積條中,但是我基本的ggplot非常接近,以至於我認爲可能有點破解(例如修改position_stack的返回對象)可能會可能。

+0

[這](https://stackoverflow.com/questions/30021410/ggplot2-side-by-side-barplot-with-one-bar-stacked-and-the-other -not?noredirect = 1&lq = 1)可能是相關的,但我認爲你必須重塑你的數據集。 – aosmith

+0

@aosmith是的,我看到了,應該把它鏈接起來。這基本上與我想要的相反(在堆棧旁邊閃避一個穩定的總數,而我想將疊加的總數放在閃避的組件旁邊)。 – Ruben

+0

我不確定我瞭解你的情節。對於每個「治療」,每個「類型」有兩個值,但只能看到圖中每個組合的最大值。那是你要的嗎? – aosmith

回答

3

您可以重塑您的數據集並使用構面來獲得效果,但這會顯示所有數據,而不僅僅是每個type/treatment組合中的最大值。

您的數據集將需要重複兩次,一次爲原始type,一次用於繪製總數。您還需要一個新變量,我稱之爲type2

df$type2 = df$type 
df2 = df 
df2$type2 = "Total" 

堆棧的兩個數據集經由rbind在一起,然後繪製使用type2作爲變量x和α變量。

ggplot(rbind(df, df2), aes(y = total, x = type2, fill = type, alpha = type2)) + 
    geom_col(width = .9) + 
    facet_wrap(~treatment, strip.position = "bottom") + 
    scale_alpha_manual(values = c(.9, .9, .3), guide = "none") + 
    theme(strip.background = element_blank(), 
      axis.text.x = element_blank(), 
      axis.ticks.length = unit(0, "mm"), 
      panel.spacing = unit(0, "mm"), 
      panel.grid.major.x = element_blank()) + 
    scale_x_discrete(expand = c(1, 0)) 

enter image description here

+0

謝謝,只是使用第二個分組var並將它堆疊起來很有意義,我明天將在工作中嘗試它。阿爾法的東西只是爲了展示它如何與我的方法疊加。 – Ruben

+1

畢竟試圖在家裏。它效果很好。一個小小的改進:如果你想讓酒吧從左到右堆疊從底部到頂部,可以顛倒'type'因子的順序。 – Ruben

+0

對不起,我刪除了關於facet_wrap條方向的評論。我想到了。我認爲角度是相對於默認角度,原來它是絕對的。所以'angle = 180'就是我在小麪條左邊時需要的。 – Ruben