如何创建类似这种风格的时间线图表?建议

如何创建类似这种风格的时间线图表?建议

我想重现大量与下图类似风格的时间线图。

图表将显示历史上的不同事件在时间上是如何相互关联的。

我还想在每行的左侧添加文本以记录时间线上绘制的事件。

我从未使用过 Tikz(或 pgfgantt)。使用其中一个创建 LaTeX 代码会很困难吗?在此处输入图片描述

答案1

这是一个自动化的解决方案。定义一个名为的新命令,\timeline它有 6 个参数,其中一个是可选的。语法是

\timeline[<eventspace>]{<label>}{<start>}{<step>}{<number>}{<intervals>}

<label>在您的示例中是“AD”。<start>是您示例中的开始年份<label>:30。<step>是标记年份之间的年数:在您的示例中是 5。<number>是标记年份的数量,在您的示例中是 11。

<eventspace>是分配给左侧事件的长度(以厘米为单位)。默认值为 2。

<intervals>是一个以逗号分隔的列表,其中每个条目的形式为begin/end/event. ,event可以为空。

例如,代码

\timeline[2.5]{A.D.}{30}{5}{11}{29/33/event 1,32/34.5/event 2,35.5/38/something,44/48/??,45.5/48/X,47/49.5/Y,47.5/52/Z,52/57.5/,61.5/63/,64/67/A}

产生输出

在此处输入图片描述

完整代码如下:

\documentclass{article}

\usepackage{tikz}
\definecolor{linecolor}{rgb}{0, 0.5, 0.5}

\newcommand{\timeline}[6][2]{\begin{tikzpicture}
    \node[anchor=base] at (0,.15){\textsf{\textbf{\scriptsize#2}}};
    \foreach [var=\n, evaluate=\n as \l using int(\n*#4+#3-#4)] in {1,...,#5}{
        \node[anchor=base] at (\n,.15){\textsf{\textbf\l}};}
    \foreach [var=\timea, var=\timeb, var=\event, count=\n] in {#6}{
        \pgfmathsetmacro{\col}{\ifodd\n"linecolor"\else"white"\fi}
        \fill[color=\col!15](-#1,-\n+1) rectangle (#5+1,-\n);
        \foreach \m in {0,...,#5}{\draw[linecolor](\m,-\n+1)--(\m,-\n);}
        \fill[linecolor,rounded corners=1.5mm]({(\timea-#3+#4)/#4},-\n+.65) rectangle ({(\timeb-#3+#4)/#4},-\n+.35);
        \node[anchor=base, right] at (-#1,-\n+.5) {\textsf{\textbf\event}};}
    \draw[linecolor](-#1,0)--(#5+1,0);
    \foreach [var=\timea, var=\timeb, count=\n] in {#6}{\draw[linecolor](-#1,-\n)--(#5+1,-\n);}
    \end{tikzpicture}}
%\timeline{label}{start}{step}{number}{intervals}

\begin{document}

\timeline[2.5]{A.D.}{30}{5}{11}{29/33/event 1,32/34.5/event 2,35.5/38/something,44/48/??,45.5/48/X,47/49.5/Y,47.5/52/Z,52/57.5/,61.5/63/,64/67/A}

\end{document}

答案2

使用 pgfgantt:

编辑:目前我能想到的最好的办法是:

\documentclass{standalone}
\usepackage{pgfgantt}
\begin{document}
\begin{ganttchart}[hgrid, vgrid]{30}{84}
\gantttitlelist[
title/.append style=
  ]{30,35,...,80}{5} \\
\ganttbar{}{30}{33}\ganttnewline
\ganttbar{}{33}{34}\ganttnewline
\ganttbar{}{36}{36}\ganttnewline
\ganttbar{}{44}{46}\ganttnewline
\ganttbar{}{46}{46}\ganttnewline
\end{ganttchart}
\end{document}

我知道这不是你想要的但我希望它会有所帮助。

甘特图

相关内容