2017-01-05 12 views
3

У меня есть заполненная Гистограмма как этоткак показать 'total' в гранжевом ggplot для заполненного бара с% label?

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

 Смежные вопросы

  • Нет связанных вопросов^_^