Eu gostaria de mostrar os valores dos dados no gráfico de barras empilhadas em ggplot2. Aqui está minha tentativa de código
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")
Eu gostaria de mostrar esses valores de dados no meio de cada porção. Qualquer ajuda nesse sentido será muito apreciada. obrigado
Respostas:
As
ggplot 2.2.0
etiquetas podem ser facilmente empilhadas usandoposition = position_stack(vjust = 0.5)
emgeom_text
.Observe também que "
position_stack()
eposition_fill()
agora empilhe os valores na ordem inversa do agrupamento, o que faz com que a ordem de empilhamento padrão corresponda à legenda."Resposta válida para versões mais antigas de
ggplot
:Aqui está uma abordagem, que calcula os pontos médios das barras.
fonte
data.table
vez deplyr
, algo assim:Data.dt[,list(Category, Frequency, pos=cumsum(Frequency)-0.5*Frequency), by=Year]
Como hadley mencionou, existem maneiras mais eficazes de comunicar sua mensagem do que rótulos em gráficos de barras empilhadas. Na verdade, os gráficos empilhados não são muito eficazes, pois as barras (cada categoria) não compartilham um eixo, por isso a comparação é difícil.
Quase sempre é melhor usar dois gráficos nessas instâncias, compartilhando um eixo comum. Em seu exemplo, estou supondo que você deseja mostrar o total geral e, em seguida, as proporções que cada categoria contribuiu em um determinado ano.
Isso lhe dará uma tela de 2 painéis como esta:
Se você deseja adicionar valores de frequência, uma tabela é o melhor formato.
fonte