我有一个想要显示的小型操作数据集。每个操作都有一个名称、开始时间和结束时间(以毫秒为单位)。
例如:
操作 1:0 至 3000
操作 2:500 至 2600
操作 3:1000 至 2900
我想用两种方式来形象化它。
在第一个可视化中,我想显示哪些操作是并行运行的。
示范:
Operation 3: ___________
Operation 2: ____________
Operation 1: ____________________
我想要制作的第二个可视化基本上是一个图表,它可视化了整个时间内运行了多少操作。这将是一个带有步进插值的图表,其坐标如下:
(0|1), (500|2), (1000|3), (2600|2), (2900|1), (3000|0)
如果将两者放在一张图像中,而第二张可视化图中的跳跃有一条垂直线指向操作的开始或结束以指示跳跃来自何处,那就太棒了。
答案1
此答案解决了您请求的第一个可视化问题。它引入了三个宏\plotlinescale{}{}
,\plotline{}{}{}
和\plotlinelabelwidth{}
。第一个宏设置与绘图线中的单位长度相关的图形值。第二个宏传递标签、起始值和终止值。最后一个宏设置标签宽度。所有图形值都必须为非负值。
用宏编辑\showplotlinescale{}
,绘制一条刻度线到它的参数值,以参数给出的增量\plotlinescale
\documentclass{article}
\newlength\unitdist\newlength\tmpdist
\newcounter{index}
\usepackage{stackengine}
\usepackage{ifthen}
\newcommand\plotline[3]{
\tmpdist=\unitdist\relax%
\divide\tmpdist by \unitnum\relax%
\multiply\tmpdist by #2\relax%
\noindent\makebox[\plotlinelabelsize][l]{#1}: \hspace{\tmpdist}%
\tmpdist=\unitdist\relax%
\divide\tmpdist by \unitnum\relax%
\multiply\tmpdist by \numexpr#3-#2\relax%
\rule[.2ex]{\tmpdist}{1ex}%
}
\newcommand\plotlinescale[2]{\def\unitnum{#1}\setlength{\unitdist}{#2}}
\newcommand\plotlinelabelwidth[1]{\def\plotlinelabelsize{#1}}
\def\plotlinetick{\rule{.2pt}{2ex}}%
\newcommand\showplotlinescale[1]{%
\setstackgap{L}{.4\baselineskip}%
\makebox[\plotlinelabelsize]{}\phantom{: }%
\setcounter{index}{0}%
\whiledo{\theindex < \numexpr#1 + 1\relax}{%
\setbox0=\hbox{\plotlinetick}\hspace{-.5\wd0}\box0\hspace{-.5\wd0}%
\bclap{\tiny\theindex}%
\addtocounter{index}{\unitnum}%
\ifnum\theindex < \numexpr#1 + 1\relax\hspace{\unitdist}\fi%
}%
}
\begin{document}
\plotlinelabelwidth{1.85cm}
\plotlinescale{750}{1.5cm}
\plotline{Operation 1}{0}{3000}\\
\plotline{Operation 2}{500}{2600}\\
\plotline{Operation 3}{1000}{2900}\\
\showplotlinescale{3000}
\end{document}