제가 재현하려는 그림은 다음과 같습니다.
나는 이전에 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]
다음과 같이 스택의 마지막 플롯에 사용할 수 있습니다.누적 막대 그래프: 총 값 표시. 그러나 pgfplots
v1.9 이상 에서는 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}