Me gustaría mostrar valores de datos en un gráfico de barras apiladas en ggplot2. Aquí está mi código intentado
Year <- c(rep(c("2006-07", "2007-08", "2008-09", "2009-10"), each = 4))
Category <- c(rep(c("A", "B", "C", "D"), times = 4))
Frequency <- c(168, 259, 226, 340, 216, 431, 319, 368, 423, 645, 234, 685, 166, 467, 274, 251)
Data <- data.frame(Year, Category, Frequency)
library(ggplot2)
p <- qplot(Year, Frequency, data = Data, geom = "bar", fill = Category, theme_set(theme_bw()))
p + geom_text(aes(label = Frequency), size = 3, hjust = 0.5, vjust = 3, position = "stack")
Me gustaría mostrar estos valores de datos en el medio de cada parte. Cualquier ayuda en este asunto será muy apreciada. Gracias
Respuestas:
Desde
ggplot 2.2.0
etiquetas se pueden apilar fácilmente usandoposition = position_stack(vjust = 0.5)
engeom_text
.También tenga en cuenta que "
position_stack()
yposition_fill()
ahora apila los valores en el orden inverso de la agrupación, lo que hace que el orden de pila predeterminado coincida con la leyenda".Respuesta válida para versiones anteriores de
ggplot
:Aquí hay un enfoque, que calcula los puntos medios de las barras.
fuente
data.table
lugar deplyr
, así que algo como esto:Data.dt[,list(Category, Frequency, pos=cumsum(Frequency)-0.5*Frequency), by=Year]
Como mencionó Hadley, hay formas más efectivas de comunicar su mensaje que las etiquetas en gráficos de barras apiladas. De hecho, los gráficos apilados no son muy efectivos ya que las barras (cada categoría) no comparten un eje, por lo que la comparación es difícil.
Casi siempre es mejor usar dos gráficos en estos casos, compartiendo un eje común. En su ejemplo, supongo que desea mostrar el total general y luego las proporciones que contribuyó cada categoría en un año determinado.
Esto le dará una pantalla de 2 paneles como esta:
Si desea agregar valores de frecuencia, una tabla es el mejor formato.
fuente