减少 pgfgantt 中标题和栏之间的空间

减少 pgfgantt 中标题和栏之间的空间

我认为 pgfgantt 中的标题和栏之间的间距太大。有没有办法减少它?例如,此代码

\begin{ganttchart}[ x unit = 0.30cm,
                    y unit chart = 1.3cm,
                    hgrid,
                    vgrid={draw=none,dotted},
                    time slot format = isodate-yearmonth,
                    compress calendar,
                    today=2014-4,
                  ]{2013-05}{2017-02}
    \gantttitle{2013}{8}
    \gantttitlelist{2014,2015,2016}{12}
    \gantttitle{2017}{2}\\
    \gantttitlelist[title label font=\tiny ,y unit title = 0.7cm]{5,...,12}{1}
    \gantttitlelist[title label font=\tiny ,y unit title = 0.7cm]{1,...,12}{1}
    \gantttitlelist[title label font=\tiny ,y unit title = 0.7cm]{1,...,12}{1}
    \gantttitlelist[title label font=\tiny ,y unit title = 0.7cm]{1,...,12}{1}
    \gantttitlelist[title label font=\tiny ,y unit title = 0.7cm]{1,2}{1}\\
    \ganttbar{Task 1}{2013-05}{2014-08}\\
    \ganttbar{Task 2}{2013-12}{2015-05}\\
    \ganttbar{Task 3}{2014-12}{2016-11}
\end{ganttchart}

渲染图片时,月份和任务之间的间距太大……难以阅读。有办法吗?谢谢

答案1

让我们从一个例子开始:

在此处输入图片描述

甘特图 a、b 和 c 使用下一个声明:

\begin{ganttchart}[ x unit = 0.30cm,
                    y unit chart = 1.2cm,
                    y unit title = 1.2cm,
                    hgrid={ultra thick,draw},
                    time slot format = isodate-yearmonth,
                    compress calendar,
                    title/.append style={opacity=.5},
                  ]{2013-05}{2013-12}

重要的参数是y unit title(在您的示例中未明确声明,则固定为其默认值:1cm)。此参数固定每个的高度title bar

为了更好地理解发生了什么,我还画了一些红线,y unit title它们之间的距离为 1.2 厘米()。

\gantttitle[title/.append style={fill=blue!15}]{2013}{8}\\
\gantttitlelist[title/.append style={fill=green!15},title label font=\tiny]{5,...,12}{1}\\
\ganttbar{Task 1}{2013-05}{2013-10}\\
\ganttbar{Task 1}{2013-09}{2013-12}

前面四行用于绘制图 a。如您所见,第一个标题栏位于最高点,第二个标题栏位于y unit title最高点以下单位,因为\\第一个标题栏之后\gantttitle声明/计数换行符。并且第一个标题栏\ganttbar位于2*y unit title最高点以下单位,因为\\第二个标题行之后在计数器中添加了换行符。

标题栏之间和标题栏与第一个任务栏之间的空白是由于y unit title和之间的差异造成的title height。此值用于固定title node's height默认情况下哪个是0.6*y unit height

因此,如果您不希望标题和任务栏之间有任何空白,则需要使用title height=1。结果将类似于图 d。(在这种情况下,我还声明了y unit title=0.6cm。)

图 b 和 c 将有助于理解当我们使用local y unit height您示例中的 as 或\\我的评论中的内容时会发生什么。图 b 的代码为:

\gantttitle[title/.append style={fill=blue!15}]{2013}{8}\\
\gantttitlelist[title/.append style={fill=green!15}, title label font=\tiny, 
                y unit title=.8cm]{5,...,12}{1}\\
\ganttbar{Task 1}{2013-05}{2013-10}\\
\ganttbar{Task 1}{2013-09}{2013-12}

我保留了\\第二个标题,但包含y unit title=0.8cm在其选项中。如您所见,第二个标题被放置在y unit title原点下方的单位处,但现在这个值是当地的0.8 厘米,而不是全球的1.2 厘米。第二个标题栏与第一个标题栏重叠。但是,由于\\在第二个标题栏之后使用,因此第一个任务栏仍然放在2*y unit title 全球的低于原点的单位,在第一个任务栏前留下大量空白。

图 c 是使用以下代码绘制的:

\gantttitle[title/.append style={fill=blue!15}]{2013}{8}\\
\gantttitlelist[title/.append style={fill=green!15},title label font=\tiny, 
                y unit title=.6cm]{5,...,12}{1}
\ganttbar{Task 1}{2013-05}{2013-10}\\
\ganttbar{Task 1}{2013-09}{2013-12}

与图 b 中使用的代码有两点不同。第一点是y unit title=0.6cm在第二个标题栏选项中。这个短值更清楚地表明了第二个栏如何与第一个栏重叠。

第二个标题栏后缺少第二个差异\\。结果是代码只计算了一个标题栏,第一个任务栏仅位于原点下方 1.2 厘米处,但由于第二个标题栏因本地y unit title值而放错位置,结果有时可以接受。这就是我发表评论的原因,它适用于您的特定示例,但无法解决实际问题。

因此,避免(或减少)标题和第一个任务之间的空白的解决方案是为选择一个好的值title height。使用title height=1,标题节点将具有y unit title高度。默认值为 0.6,因此 0.4*y 单位标题是标题栏和任务栏之间的空白。

示例图使用的完整代码为:

\documentclass[tikz,border=3mm]{standalone}
\usepackage{pgfgantt}
\begin{document}

\begin{tikzpicture}
\begin{ganttchart}[ x unit = 0.30cm,
                    y unit chart = 1.2cm,
                    y unit title = 1.2cm,
                    hgrid={ultra thick,draw},
                    time slot format = isodate-yearmonth,
                    compress calendar,
                    title/.append style={opacity=.5},
%                    today=2014-4,
                  ]{2013-05}{2013-12}
    \gantttitle[title/.append style={fill=blue!15}]{2013}{8}\\
    \gantttitlelist[title/.append style={fill=green!15},
                    title label font=\tiny]{5,...,12}{1}\\
    \ganttbar{Task 1}{2013-05}{2013-10}\\
    \ganttbar{Task 1}{2013-09}{2013-12}
\end{ganttchart}
\foreach \i in {0,...,4}
\draw[thin, red] (-.5,-\i*1.2cm)-- ++(0:3.5);
\node[above] at (1.25,0) {a)};

\begin{scope}[xshift=4cm]
\begin{ganttchart}[ x unit = 0.30cm,
                    y unit chart = 1.2cm,
                    y unit title = 1.2cm,
                    hgrid={ultra thick,draw},
                    time slot format = isodate-yearmonth,
                    title/.append style={opacity=.5},           
            compress calendar,
                  ]{2013-05}{2013-12}
    \gantttitle[title/.append style={fill=blue!15}]{2013}{8}\\
    \gantttitlelist[title/.append style={fill=green!15}, 
                    title label font=\tiny, 
                    y unit title=.8cm]{5,...,12}{1}\\
    \ganttbar{Task 1}{2013-05}{2013-10}\\
    \ganttbar{Task 1}{2013-09}{2013-12}
\end{ganttchart}
\foreach \i in {0,...,4}
\draw[thin, red] (-.5,-\i*1.2cm)-- ++(0:3.5);
\node[above] at (1.25,0) {b)};
\end{scope}

\begin{scope}[xshift=8cm]
\begin{ganttchart}[ x unit = 0.30cm,
                    y unit chart = 1.2cm,
                    y unit title = 1.2cm,
                    hgrid={ultra thick,draw},
                    time slot format = isodate-yearmonth,
            title/.append style={opacity=.5},           
                    compress calendar,
                  ]{2013-05}{2013-12}
    \gantttitle[title/.append style={fill=blue!15}]{2013}{8}\\
    \gantttitlelist[title/.append style={fill=green!15},
                    title label font=\tiny, 
                    y unit title=.6cm]{5,...,12}{1}
    \ganttbar{Task 1}{2013-05}{2013-10}\\
    \ganttbar{Task 1}{2013-09}{2013-12}
\end{ganttchart}
\foreach \i in {0,...,4}
\draw[thin, red] (-.5,-\i*1.2cm)-- ++(0:3.5);
\node[above] at (1.25,0) {c)};
\end{scope}

\begin{scope}[xshift=12cm]
\begin{ganttchart}[ x unit = 0.30cm,
                    y unit chart = 1.2cm,
                    y unit title = 0.6cm,
                    title height=1,
                    hgrid={ultra thick,draw},
                    time slot format = isodate-yearmonth,
            title/.append style={opacity=.5},           
                    compress calendar,
                  ]{2013-05}{2013-12}
    \gantttitle[title/.append style={fill=blue!15}]{2013}{8}\\
    \gantttitlelist[title/.append style={fill=green!15},
                    title label font=\tiny]{5,...,12}{1}\\
    \ganttbar{Task 1}{2013-05}{2013-10}\\
    \ganttbar{Task 1}{2013-09}{2013-12}
\end{ganttchart}
\foreach \i in {0,...,4}
\draw[thin, red] (-.5,-\i*1.2cm)-- ++(0:3.5);
\node[above] at (1.25,0) {d)};
\end{scope}
\end{tikzpicture}

\end{document}

相关内容