Problema de ybar apiladas

Problema de ybar apiladas

La figura que busco reproducir es la siguiente:

ingrese la descripción de la imagen aquí

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 stackedy 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 pgfplotsla versión 1.9 y posteriores, se agrega código adicional para modificar el comportamiento de nodes near coordslos 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:

ingrese la descripción de la imagen aquí


Edición 3: se agregó otra solicitud en un comentario para que no haya notación científica en las nodes near coordsetiquetas. El estilo de esos nodos está determinado por el every node near coordestilo, 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}

ingrese la descripción de la imagen aquí

información relacionada