Проблема сложенного Y-образного бруса

Проблема сложенного Y-образного бруса

Рисунок, который я собираюсь воспроизвести, выглядит следующим образом:

введите описание изображения здесь

Раньше я мог создавать составную 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}

введите описание изображения здесь

Связанный контент