Какая среда наиболее подходит для создания «каскадных диаграмм»?

Какая среда наиболее подходит для создания «каскадных диаграмм»?

Недавно я работал над исследовательской работой, посвященной экономическим структурным изменениям, и один из самых простых способов наглядно показать это явление — каскадные диаграммы. Сначала я решил использовать Excel для ее создания, и вот что получилось (это только часть диаграммы, так как я просто хочу дать вам беглый взгляд):

Каскадные диаграммы для иллюстрации структурных изменений в экономике

Диаграмма выглядит хорошо, но поскольку я всегда предпочитал LaTeX, я решил попробовать построить ее с помощью пакета tikz. Однако было трудно найти подходящую среду, чтобы сделать это красиво и автоматически. На данный момент я использовал чистые координаты для построения диаграммы. Я использовал этот код:

\documentclass[border = .5cm .5cm .5cm .5cm]{standalone}
\usepackage[utf8]{inputenc}
\usepackage{tikz} % tikzpicture

\begin{document}

\begin{tikzpicture}[xscale = 5]
   % Rectangles
   \path[fill = blue!70]    (0,0cm)       rectangle (0.3450288,0.20426);
   \path[fill = green!50]   (0.3450288,0) rectangle (0.5766886,0.2539946);
   \path[fill = cyan]       (0.5766886,0) rectangle (0.7382995,0.3101311);
   \path[fill = teal]       (0.7382995,0) rectangle (0.8515251,0.4869684);
   \path[fill = brown]      (0.8515251,0) rectangle (0.9007586,0.4881487);
   \path[fill = pink]       (0.9007586,0) rectangle (0.9366190,0.6492083);
   \path[fill = orange]     (0.9366190,0) rectangle (0.9417933,0.8690585);
   \path[fill = violet]     (0.9417933,0) rectangle (0.9483419,0.9971954);
   \path[fill = magenta!50] (0.9483419,0) rectangle (0.9751932,1.594287);
   \path[fill = black!70]   (0.9751932,0) rectangle (0.9953494,1.837054);
   \path[fill = red!70]     (0.9953494,0) rectangle (1,3.309693);
   % Axis
   \draw[<->] (0,3.5) -- (0,0) -- (1.05,0);
   \foreach \x in {0,0.5,1.0,1.5,2.0,2.5,3.0,3.5}
       \path (0,\x) node[left]{\tiny $\x$};
       \node[rotate = 90] at (-0.15,1.75){\tiny\parbox{4cm}{\centering Productividad por sector como proporción de la productividad media}};
       \node at (0.5,-0.3){\tiny\parbox{4cm}{\centering Proporción del empleo capturado}};
   % Labels
   \path[fill = blue!70] (0,-0.7) rectangle (0.02,-0.6);
   \node[right] at (0.01,-0.67) {\tiny agsp};
   \path[fill = green!50] (0,-0.9) rectangle (0.02,-0.8);
   \node[right] at (0.01,-0.87) {\tiny chre};
   \path[fill = cyan] (0,-1.1) rectangle (0.02,-1);
   \node[right] at (0.01,-1.07) {\tiny serp};
   % -----
   \path[fill = teal] (0.2,-0.7) rectangle (0.22,-0.6);
   \node[right] at (0.21,-0.67) {\tiny indm};
   \path[fill = brown] (0.2,-0.9) rectangle (0.22,-0.8);
   \node[right] at (0.21,-0.87) {\tiny const};
   \path[fill = pink] (0.2,-1.1) rectangle (0.22,-1);
   \node[right] at (0.21,-1.07) {\tiny trco};
   % -----
   \path[fill = orange] (0.4,-0.7) rectangle (0.42,-0.6);
   \node[right] at (0.41,-0.67) {\tiny exmi};
   \path[fill = violet] (0.4,-0.9) rectangle (0.42,-0.8);
   \node[right] at (0.41,-0.87) {\tiny eaal};
   \path[fill = magenta] (0.4,-1.1) rectangle (0.42,-1);
   \node[right] at (0.41,-1.07) {\tiny adpu};
   % -----
   \path[fill = black!70] (0.6,-0.7) rectangle (0.62,-0.6);
   \node[right] at (0.61,-0.67) {\tiny alqu};
   \path[fill = red!70] (0.6,-0.9) rectangle (0.62,-0.8);
   \node[right] at (0.61,-0.87) {\tiny sifc};
\end{tikzpicture}

\end{document}

С помощью этого кода мне удалось сгенерировать следующее:

введите описание изображения здесь Что выглядит относительно неплохо, но я бы предпочел сгенерировать его более автоматическим и менее болезненным способом. Может ли кто-нибудь порекомендовать мне другой подход к созданию диаграммы? (Я также пробовал комбинировать пакет tikzс pgfplotsпакетом, но не смог найти подходящий вариант).

решение1

Мне удалось сгенерировать каскадную диаграмму, используя const plotи ybar intervalопции среды axis. Мне также удалось добавить отдельные записи легенды для каждого бара с area legendопцией команды \addplot. Вот минимальный пример:

\documentclass[margin=0.3cm]{standalone}

\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{compat = newest}

\begin{document}

\begin{tikzpicture}
   \begin{axis}[
      title = Cascade Chart in \LaTeX,
      ylabel = Productivity,
      xlabel = Employment share (\%),
      xmin = 0, xmax = 1,
      ymin = 0, ymax = 10,
      legend entries = {A, B, C},
      legend pos = outer north east,
   ]
      \addplot[
         const plot,
         ybar interval,
         fill = green,
         area legend
      ] coordinates {(0,2) (0.6,2)};
      \addplot[
         const plot,
         ybar interval,
         fill = blue,
         area legend
      ] coordinates {(0.6,4) (0.9,4)};
      \addplot[
         const plot,
         ybar interval,
         fill = red,
         area legend
      ] coordinates {(0.9,9) (1,9)};
   \end{axis}
\end{tikzpicture}

\end{document}

Результат должен выглядеть так:

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

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