堆疊ybar問題

堆疊ybar問題

我想要重現的圖如下:

在此輸入影像描述

我之前已經能夠按照 pgfplots 手冊第 4.5.9 章中給出的範例使用座標來產生堆積的 ybar 圖表。不幸的是,現在我有太多的數據點,手動執行此操作需要很長時間。有沒有簡單的方法可以達到與上圖類似的效果?我嘗試從之前的問題中搜尋範例,但不幸的是我無法找到適合我需求的範例。

所需圖表的數據如下:

\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]堆疊中的最後一個圖,如下所示堆積長條圖:顯示總值。但是,在v1.9 及更高版本中,增加了一些額外的程式碼來修改堆積長條圖類型pgfplots的行為。nodes near coords本手冊第 4.5.9 節末尾對此進行了討論。

對於大多數長條圖,這些修改是有意義且合理的。但這裡不要他們。因此,我們可以透過清空使用的內部樣式來覆蓋修改pgfplots因此,我們可以透過清空有時環境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}

在此輸入影像描述

相關內容