r ggplot2 bar-chart

dibuje el valor de suma sobre la barra apilada en ggplot2



bar-chart (2)

¿Cómo dibujo el valor de la suma de cada clase (en mi caso: a = 450, b = 150, c = 290, d = 90) sobre la barra apilada en ggplot2? Aquí está mi código :

#Data hp=read.csv(textConnection( "class,year,amount a,99,100 a,100,200 a,101,150 b,100,50 b,101,100 c,102,70 c,102,80 c,103,90 c,104,50 d,102,90")) hp$year=as.factor(hp$year) #Plotting p=ggplot(data=hp) p+geom_bar(binwidth=0.5,stat="identity")+ aes(x=reorder(class,-value,sum),y=value,label=value,fill=year)+ theme()


Puede hacer esto creando un conjunto de datos de totales por clase (esto se puede hacer de varias maneras, pero prefiero dplyr ):

library(dplyr) totals <- hp %>% group_by(class) %>% summarize(total = sum(value))

Luego, agregue una capa geom_text a su gráfico, utilizando totals como conjunto de datos:

p + geom_bar(binwidth = 0.5, stat="identity") + aes(x = reorder(class, -value, sum), y = value, label = value, fill = year) + theme() + geom_text(aes(class, total, label = total, fill = NULL), data = totals)

Puede hacer que el texto sea más alto o más bajo que la parte superior de las barras usando el argumento vjust , o simplemente agregando algún valor al total :

p + geom_bar(binwidth = 0.5, stat = "identity") + aes(x = reorder(class, -value, sum), y = value, label = value, fill = year) + theme() + geom_text(aes(class, total + 20, label = total, fill = NULL), data = totals)


Puede usar la funcionalidad de resumen incorporada de ggplot2 directamente:

ggplot(hp, aes(reorder(class, -amount, sum), amount, fill = year)) + geom_col() + geom_text( aes(label = stat(y), group = class), stat = ''summary'', fun.y = sum, vjust = -1 )