Gestapeltes ybar-Problem

Gestapeltes ybar-Problem

Die Abbildung, die ich reproduzieren möchte, ist die folgende:

Bildbeschreibung hier eingeben

Ich konnte zuvor ein gestapeltes Y-Balken-Diagramm erstellen, indem ich Koordinaten verwendete und den Beispielen im pgfplots-Handbuch, Kapitel 4.5.9, folgte. Leider habe ich jetzt so viele Datenpunkte, dass es ewig dauern würde, dies manuell zu tun. Gibt es eine einfache Möglichkeit, etwas Ähnliches wie die obige Abbildung zu erreichen? Ich habe versucht, nach Beispielen aus früheren Fragen zu suchen, konnte aber leider keins finden, das meinen Anforderungen entspricht.

Die Daten für das gewünschte Diagramm sind die folgenden:

\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

Antwort1

Es ist nicht klar, was Ihrer Meinung nach manuell getan werden musste, aber ybar stackedhier funktioniert es problemlos, jedes Teil einfach zu verwenden und zu plotten.

\addplot+[nodes near coords]Für die Summen über den Balken können wir für das letzte Diagramm im Stapel verwenden, wie inGestapeltes Balkendiagramm: Gesamtwert anzeigen. In pgfplotsv1.9 und höher wurde jedoch zusätzlicher Code hinzugefügt, um das Verhalten nodes near coordsder gestapelten Balkendiagrammtypen zu ändern. Dies wird am Ende von Abschnitt 4.5.9 im Handbuch erläutert.

Für die meisten Balkendiagramme sind diese Änderungen sinnvoll und vernünftig. Aber hier sind sie nicht erwünscht. Wir können die Änderungen also überschreiben, indem wir einen internen Stil leeren, der von pgfplotssometime verwendet wird.VorEinstellung ybar stacked. Dies sieht im Allgemeinen so aus

\pgfplotsset{nodes near coords ybar stacked configuration/.style={}}

und es kann lokal oder global im Dokument festgelegt werden, je nachdem, wie weitreichend seine Wirkung sein soll.

Hier ist der vollständige Code:

\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}

Natürlich müssen die Achsen-/Teilstrichbeschriftungen, Abstände und andere Dinge geändert werden, um das gewünschte Ergebnis zu erzielen, aber das ist alles machbar. Ich denke, Ihre Frage konzentriert sich eher auf die Stapelung der Balken selbst.

Und das Ergebnis:

Bildbeschreibung hier eingeben


Bearbeitung 3: In einem Kommentar wurde eine weitere Anfrage hinzugefügt, keine wissenschaftliche Notation in den nodes near coordsBeschriftungen zu verwenden. Der Stil dieser Knoten wird durch den every node near coordStil bestimmt, der zunächst leer ist. Wir können die wissenschaftliche Notation mithilfe des Standardstils zum Drucken von Zahlen deaktivieren pgf/number format/fixed. Hier habe ich auch gezeigt, wie die Schriftgröße dieser Beschriftungen verringert werden kann, indem Folgendes hinzugefügt wird 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}

Bildbeschreibung hier eingeben

verwandte Informationen