La figura que busco reproducir es la siguiente:
He podido producir un gráfico de barras y apiladas antes usando coordenadas siguiendo los ejemplos dados en el capítulo 4.5.9 del manual de pgfplots. Desafortunadamente, ahora tengo tantos puntos de datos que me llevaría mucho tiempo hacerlo manualmente. ¿Existe alguna manera sencilla de lograr algo similar a la figura anterior? Intenté buscar, por ejemplo, en preguntas anteriores, pero desafortunadamente no pude encontrar una que se adapte a mis necesidades.
Los datos para la gráfica deseada son los siguientes:
\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
Respuesta1
No está claro qué crees que es necesario hacer manualmente, pero simplemente usar ybar stacked
y trazar cada pieza funciona bien aquí.
Para los totales encima de las barras, podemos usar\addplot+[nodes near coords]
para el último gráfico de la pila como se muestra enGráfico de barras apiladas: muestra el valor total. Sin embargo, en pgfplots
la versión 1.9 y posteriores, se agrega código adicional para modificar el comportamiento de nodes near coords
los tipos de gráficos de barras apiladas. Esto se analiza al final de la sección 4.5.9 del manual.
Para la mayoría de los gráficos de barras, estas modificaciones tienen sentido y son razonables. Pero aquí no se les quiere. Entonces, podemos anular las modificaciones vaciando un estilo interno usado porpgfplots
alguna vezantesconfiguración ybar stacked
. Esto en general parece
\pgfplotsset{nodes near coords ybar stacked configuration/.style={}}
y se puede configurar local o globalmente en el documento dependiendo de qué tan extendido deba ser su efecto.
Aquí está el 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}
Por supuesto, es necesario cambiar las etiquetas de eje/marca, el espaciado y otras cosas para que coincidan con el resultado deseado, pero todo esto es factible. Creo que tu pregunta se centra más bien en el apilamiento de las barras.
Y el resultado:
Edición 3: se agregó otra solicitud en un comentario para que no haya notación científica en las nodes near coords
etiquetas. El estilo de esos nodos está determinado por el every node near coord
estilo, que inicialmente está vacío. Podemos desactivar la notación científica utilizando el estilo estándar de impresión de números pgf/number format/fixed
. Aquí también he mostrado cómo disminuir el tamaño de fuente de esas etiquetas agregando también 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}