更新。

更新。

我需要绘制以下图表的思路。显然,我并不期望完整的代码。我希望我能找到绘制此图表的最佳方法。我应该尝试分别绘制每个矩形吗?将其绘制为堆积条形图是否更好?在此处输入图片描述

答案1

这是一个 Tikz 的想法。

我定义了宏\drawboxes,旨在排版图中的其中一列。它接收两个参数:

  • 第一个是列的宽度
  • 第二个是一个逗号分隔的值列表,表示每个框的高度(从底部到顶部),单位与轴相同。内部按比例缩小,因此 10 个单位为 5 毫米。

此宏绘制框列,并为每个框命名,以便以后轻松添加注释,例如指向框的数字和线条。自动分配的名称为(1)(2)等等(也是从下到上)。

以下代码绘制了轴和第一列(我编造了框的值,试图使它们与您提供的图形相似)。

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{positioning}
\begin{document}

\newcounter{node}
\def\drawboxes#1#2{ % width, list of heights of each box
\setcounter{node}{1}
\coordinate (aux);
\foreach \n/\h in {#2} {
  \node[rectangle, minimum width=#1, minimum height=\h/2 mm, inner sep=0, draw,
        above=0mm of aux, alias=aux] (\arabic{node}) {};
  \stepcounter{node}
  }
}

\begin{tikzpicture}[every node/.style={font=\scriptsize, inner sep=2pt}]
% Draw axis (the scale is 10 = 5mm
\draw[very thick] (0,0) -- (6,0) (0,0) -- (0,900/2 mm);
\foreach \i in {0,100,...,900}
 \draw[thin] (0,\i/2 mm) -- +(-1mm, 0) node[left] {\i};

\begin{scope}[xshift=1.5cm]
    % Draw the (empty) boxes
    \drawboxes{1cm}{50,20,90,50,120,40,60,100,20,40};

    % Add manually the external labels
    \draw (1.east) -- +( 2mm, 2mm) node[right] {1};
    \draw (2.west) -- +(-3mm, 3mm) node[left]  {2};
    \draw (6.west) -- +(-3mm, 0mm) node[left]  {6};
    \draw (9.east) -- +( 2mm, 2mm) node[right] {9};
    \draw (10.west)-- +(-3mm, 3mm) node[left]  {10};

    % Add in a loop the internal ones
    \foreach \n in {3,4,5,7,8}
      \node at (\n.center) {\n};

        % Add column legend
        \node[below=2mm of 1] {Step 1};
\end{scope}
\end{tikzpicture}
\end{document}

其结果为:

结果

我想你已经明白了这个想法,并写出了剩下的图形。

更新。

我刚刚注意到,在发布我的答案后,第二列和第三列的编号不是从 1 开始的,所以我添加了第三个参数来\drawboxes选择第一个框的名称。其余的按递增顺序构建。

这是与上面相同的例子,但这次盒子从 11 开始。

\documentclass{独立} \usepackage{tikz} \usetikzlibrary{定位} \begin{文档}

\newcounter{node}
\def\drawboxes#1#2#3{ % width, name of the first node, list of heights of each box
\setcounter{node}{#2}
\coordinate (aux);
\foreach \n/\h in {#3} {
  \node[rectangle, minimum width=#1, minimum height=\h/2 mm, inner sep=0, draw,
        above=0mm of aux, alias=aux] (\arabic{node}) {};
  \stepcounter{node}
  }
}

\begin{tikzpicture}[every node/.style={font=\scriptsize, inner sep=2pt}]
% Draw axis (the scale is 10 = 5mm
\draw[very thick] (0,0) -- (6,0) (0,0) -- (0,900/2 mm);
\foreach \i in {0,100,...,900}
 \draw[thin] (0,\i/2 mm) -- +(-1mm, 0) node[left] {\i};

\begin{scope}[xshift=1.5cm]
    % Draw the (empty) boxes
    \drawboxes{1cm}{11}{50,20,90,50,120,40,60,100,20,40};

    % Add manually the external labels
    \draw (11.east) -- +( 2mm, 2mm) node[right] {11};
    \draw (12.west) -- +(-3mm, 3mm) node[left]  {12};
    \draw (16.west) -- +(-3mm, 0mm) node[left]  {16};
    \draw (19.east) -- +( 2mm, 2mm) node[right] {19};
    \draw (20.west)-- +(-3mm, 3mm) node[left]  {20};

    % Add in a loop the internal ones
    \foreach \n in {13,14,15,17,18}
      \node at (\n.center) {\n};

        % Add column legend
        \node[below=2mm of 11] {Step 1};
\end{scope}
\end{tikzpicture}
\end{document}

结果2

答案2

我建议使用功能强大的矢量绘图程序,例如 Inkscape(http://inkscape.org/)、将图纸导出为 PDF 以及使用\includegraphics{drawing.pdf}

这是迄今为止将此图表放入文档的最快捷、最简单的方法。

编辑:我回答后才看到 {tikz-pgf} {pgfplots} 标签。请考虑重写您的问题,更具体地说明您尝试用来完成任务的软件/软件包。

相关内容