我需要绘制以下图表的思路。显然,我并不期望完整的代码。我希望我能找到绘制此图表的最佳方法。我应该尝试分别绘制每个矩形吗?将其绘制为堆积条形图是否更好?
答案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
我建议使用功能强大的矢量绘图程序,例如 Inkscape(http://inkscape.org/)、将图纸导出为 PDF 以及使用\includegraphics{drawing.pdf}
。
这是迄今为止将此图表放入文档的最快捷、最简单的方法。
编辑:我回答后才看到 {tikz-pgf} {pgfplots} 标签。请考虑重写您的问题,更具体地说明您尝试用来完成任务的软件/软件包。