Рисунок, который я собираюсь воспроизвести, выглядит следующим образом:
Раньше я мог создавать составную ybar диаграмму, используя координаты, следуя примерам, приведенным в главе 4.5.9 руководства pgfplots. К сожалению, теперь у меня так много точек данных, что мне потребовалась бы уйма времени, чтобы сделать это вручную. Есть ли простой способ добиться чего-то похожего на рисунок выше? Я пытался искать примеры из предыдущих вопросов, но, к сожалению, не смог найти тот, который бы соответствовал моим потребностям.
Данные для желаемого графика следующие:
\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
версии 1.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}