積み上げ Y バー問題

積み上げ Y バー問題

私が再現しようとしている図は次のとおりです。

ここに画像の説明を入力してください

以前は、pgfplots マニュアルの 4.5.9 章に示されている例に従って、座標を使用して積み上げ Y バー チャートを作成できました。残念ながら、現在、データ ポイントが多すぎるため、これを手動で実行するには長い時間がかかります。上の図に似たものを簡単に実現できる方法はありますか? 以前の質問から例を検索してみましたが、残念ながらニーズに合うものを見つけることができませんでした。

目的のグラフのデータは次のとおりです。

\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

答え1

手動で行う必要があると思われる作業が明確ではありませんが、ybar stacked各部分を使用してプロットするだけでここでは問題なく動作します。

棒グラフの上の数値の合計については、次\addplot+[nodes near coords]の図に示すように、スタックの最後のプロットで使用できます。積み上げ棒グラフ: 合計値を表示ただし、バージョン 1.9 以降では、積み上げ棒グラフ タイプの のpgfplots動作を変更するための追加コードが追加されています。これについては、マニュアルのセクション 4.5.9 の最後で説明されています。nodes near coords

ほとんどの棒グラフでは、これらの変更は意味があり、合理的です。しかし、ここでは必要ではありません。そのため、pgfplotssometimeで使用される内部スタイルを空にすることで、変更を上書きできます。前に設定ybar stacked。これは一般的に次のようになります

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

また、効果をどの程度広範囲に及ぼす必要があるかに応じて、ドキュメント内でローカルまたはグローバルに設定できます。

完全なコードは次のとおりです。

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

もちろん、軸/目盛りラベル、間隔、その他の要素を目的の結果に合わせて変更する必要がありますが、これらはすべて実行可能です。質問はむしろバー自体の積み重ねに焦点を当てていると思います。

そして結果は次の通りです。

ここに画像の説明を入力してください


編集 3: ラベルに科学的記法を使用しないようにという別のリクエストがコメントに追加されましたnodes near coords。これらのノードのスタイルはスタイルによって決定されますがevery node near coord、スタイルは最初は空です。標準の数値印刷スタイルを使用して科学的記法を無効にすることができますpgf/number format/fixed。ここでは、次のものを追加して、これらのラベルのフォント サイズを小さくすることも示しています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}

ここに画像の説明を入力してください

関連情報