Die Abbildung, die ich reproduzieren möchte, ist die folgende:
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 stacked
hier 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 pgfplots
v1.9 und höher wurde jedoch zusätzlicher Code hinzugefügt, um das Verhalten nodes near coords
der 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 pgfplots
sometime 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:
Bearbeitung 3: In einem Kommentar wurde eine weitere Anfrage hinzugefügt, keine wissenschaftliche Notation in den nodes near coords
Beschriftungen zu verwenden. Der Stil dieser Knoten wird durch den every node near coord
Stil 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}