A figura que pretendo reproduzir é a seguinte:
Já consegui produzir um gráfico ybar empilhado usando coordenadas, seguindo os exemplos dados no manual pgfplots, capítulo 4.5.9. Infelizmente agora tenho tantos pontos de dados que levaria muito tempo para fazer isso manualmente. Existe uma maneira simples de conseguir algo semelhante à figura acima? Tentei pesquisar, por exemplo, em perguntas anteriores, mas infelizmente não consegui encontrar uma que atenda às minhas necessidades.
Os dados para o gráfico desejado são os seguintes:
\pgfplotstableread[col sep=comma,header=true]{
Year,RoW,MEA,China,Americas,APAC,Europe
2000,751,0,19,21,368,129
2001,807,0,24,24,496,265
2002,887,0,42,54,686,399
2003,964,0,52,102,916,601
2004,993,1,62,163,1198,1306
2005,1003,1,70,246,1502,2291
2006,1108,1,80,355,1827,3289
2007,1150,2,100,522,2098,5312
2008,1226,3,140,828,2628,11020
2009,1306,25,300,1328,3373,16854
2010,1590,80,800,2410,4951,30505
2011,2098,205,3300,4590,7513,52764
2012,2098,570,6800,8365,12159,70489
2013,2098,953,18600,13727,21992,81464
}\data
Responder1
Não está claro o que você acha que precisa ser feito manualmente, mas apenas usar ybar stacked
e plotar cada peça funciona bem aqui.
Para os totais no topo das barras, podemos usar \addplot+[nodes near coords]
o último gráfico da pilha, conforme mostrado emGráfico de barras empilhadas: exibir valor total. No entanto, na pgfplots
versão 1.9 e posterior, algum código extra é adicionado para modificar o comportamento dos nodes near coords
tipos de gráfico de barras empilhadas. Isso é discutido no final da seção 4.5.9 do manual.
Para a maioria dos gráficos de barras, essas modificações fazem sentido e são razoáveis. Mas eles não são desejados aqui. Assim, podemos substituir as modificações esvaziando um estilo interno usado por pgfplots
algum tempoantescontexto ybar stacked
. Isso em geral parece
\pgfplotsset{nodes near coords ybar stacked configuration/.style={}}
e pode ser definido local ou globalmente no documento, dependendo de quão difundido o seu efeito precisa ser.
Aqui está o código completo:
\documentclass[tikz]{standalone}
\usepackage{pgfplots,pgfplotstable}
\pgfplotsset{compat=1.12}
\pgfplotstableread[col sep=comma,header=true]{
Year,RoW,MEA,China,Americas,APAC,Europe
2000,751,0,19,21,368,129
2001,807,0,24,24,496,265
2002,887,0,42,54,686,399
2003,964,0,52,102,916,601
2004,993,1,62,163,1198,1306
2005,1003,1,70,246,1502,2291
2006,1108,1,80,355,1827,3289
2007,1150,2,100,522,2098,5312
2008,1226,3,140,828,2628,11020
2009,1306,25,300,1328,3373,16854
2010,1590,80,800,2410,4951,30505
2011,2098,205,3300,4590,7513,52764
2012,2098,570,6800,8365,12159,70489
2013,2098,953,18600,13727,21992,81464
}\data
\begin{document}
\begin{tikzpicture}
\begin{axis}[
nodes near coords ybar stacked configuration/.style={}, % disable modifications
ybar stacked,
]
\addplot table[x=Year,y=China] from \data;
\addplot table[x=Year,y=Americas] from \data;
\addplot table[x=Year,y=APAC] from \data;
\addplot+[nodes near coords] table[x=Year,y=Europe] from \data;
\end{axis}
\end{tikzpicture}
\end{document}
É claro que os rótulos dos eixos/marcas, o espaçamento e outras coisas precisam ser alterados para corresponder ao resultado desejado, mas tudo isso é possível. Acho que sua pergunta está mais focada no empilhamento das próprias barras.
E o resultado:
Edição 3: Outra solicitação foi adicionada em um comentário para não haver notação científica nos nodes near coords
rótulos. O estilo desses nós é determinado pelo every node near coord
estilo, que inicialmente está vazio. Podemos desativar a notação científica usando o estilo padrão de impressão de números pgf/number format/fixed
. Aqui também mostrei a diminuição do tamanho da fonte desses rótulos adicionando também node font=\scriptsize
:
\documentclass[tikz]{standalone}
\usepackage{pgfplots,pgfplotstable}
\pgfplotsset{compat=1.12}
\pgfplotstableread[col sep=comma,header=true]{
Year,RoW,MEA,China,Americas,APAC,Europe
2000,751,0,19,21,368,129
2001,807,0,24,24,496,265
2002,887,0,42,54,686,399
2003,964,0,52,102,916,601
2004,993,1,62,163,1198,1306
2005,1003,1,70,246,1502,2291
2006,1108,1,80,355,1827,3289
2007,1150,2,100,522,2098,5312
2008,1226,3,140,828,2628,11020
2009,1306,25,300,1328,3373,16854
2010,1590,80,800,2410,4951,30505
2011,2098,205,3300,4590,7513,52764
2012,2098,570,6800,8365,12159,70489
2013,2098,953,18600,13727,21992,81464
}\data
\begin{document}
\begin{tikzpicture}
\begin{axis}[
nodes near coords ybar stacked configuration/.style={}, % disable modifications
ybar stacked,
every node near coord/.style={node font=\scriptsize,/pgf/number format/fixed},
]
\addplot table[x=Year,y=China] from \data;
\addplot table[x=Year,y=Americas] from \data;
\addplot table[x=Year,y=APAC] from \data;
\addplot+[nodes near coords] table[x=Year,y=Europe] from \data;
\end{axis}
\end{tikzpicture}
\end{document}