2017-01-05 22 views
3

我有一個充滿條形圖這樣如何在帶有%標籤的填充條的分面ggplot中顯示'total'?

library(dplyr) 
library(ggplot2) 

df <- data.frame(facet=c(rep(1,6),rep(2,6)),type=rep(c('a','b','c'),2), subtype=c('x','y'), value=c(10,20,30,10,50,70)) 

df %>% group_by(type, facet) %>% 
mutate(pct=value/sum(value)) %>% 
mutate(pos=cumsum(pct) - (0.5 * pct)) %>% 
ggplot(aes(type, pct, fill=subtype)) + geom_bar(stat='identity') + 
geom_text(aes(label=paste0(round(100*pct, 0), '%'),y=pos)) + facet_grid(.~facet, margins=TRUE) 

如果沒有顯示在小面它的作品總。但由於用於顯示%數據標籤的方法(我想知道是否有更好的方法),總的方面會變得混亂。有什麼建議?謝謝。

+0

你期望的利潤率是在範圍[0,1]? – Alex

+0

yup,因爲在所有填寫到100% – santoku

回答

5

我正確安排了標籤,並事先定義了邊距圖。我想這是你所期望的輸出。我無法弄清楚是否有辦法通過來實現這一點。

df <- data.frame(facet=c(rep(1,6),rep(2,6)),type=rep(c('a','b','c'),2), 
       subtype=c('x','y'), value=runif(12, 0, 100)) 

df1 <- df %>% 
     arrange(desc(subtype)) %>% 
     mutate(facet = factor(facet, levels = c("1", "2", "(all)"))) %>% 
     group_by(type, facet) %>% 
     mutate(pct=value/sum(value), 
       pos=cumsum(pct) - (0.5 * pct)) 

df2 <- df1 %>% 
     group_by(type, subtype) %>% 
     summarise(facet = factor("(all)", levels = c("1", "2", "(all)")), 
       pct = sum(pct)/2, 
       pos = sum(pos/2)) 

    bind_rows(df1, df2) %>% 
    ggplot(aes(type, pct, fill=subtype)) + 
    geom_bar(stat='identity', position = "stack") + 
    geom_text(aes(label=paste0(round(100*pct, 0), '%'),y=pos)) + 
    facet_grid(.~facet) 

enter image description here

+0

謝謝。我在想像類似grid.arrange的東西。似乎很難在填充欄上顯示標籤。 – santoku

相關問題