使用 pgfplots,在图之间添加垂直/水平间距?

使用 pgfplots,在图之间添加垂直/水平间距?

我曾经问过一个非常类似的问题;如何使用 pgfplots 在两个单独的图之间添加空间?。但这有些不同。

我有以下代码;

\documentclass{standalone}
\usepackage{graphics}
\usepackage{tikz,pgfplots}
\pgfplotsset{compat=1.6}
\begin{document}
\begin{tikzpicture}

\begin{axis}[%
width=3cm,
height=3cm,
scale only axis,
every x tick label/.append style={font=\scriptsize\color{gray!80!black}},
xmin=0, xmax=20000,
xlabel={$t$},
xmajorgrids,
xminorgrids,
every y tick label/.append style={font=\scriptsize\color{gray!80!black}},
ymin=0.0004, ymax=0.0012,
ylabel={$\phi_{\mathrm{i}}(t)$},
ymajorgrids,
yminorgrids,
name=plot1]

\end{axis}

\begin{axis}[%
width=3cm,
height=3cm,
scale only axis,
every x tick label/.append style={font=\scriptsize\color{gray!80!black}},
xmin=0, xmax=20000,
xlabel={$t$},
xmajorgrids,
xminorgrids,
every y tick label/.append style={font=\scriptsize\color{gray!80!black}},
ymin=0.2, ymax=1.2,
ylabel={$h(t)$},
ymajorgrids,
yminorgrids,
name=plot2,
at=(plot1.right of north east), anchor=left of north west]

\end{axis}

\begin{axis}[%
width=3cm,
height=3cm,
scale only axis,
every x tick label/.append style={font=\scriptsize\color{gray!80!black}},
xmin=0, xmax=20000,
xlabel={$t$},
xmajorgrids,
xminorgrids,
every y tick label/.append style={font=\scriptsize\color{gray!80!black}},
ymin=0.0004, ymax=0.0012,
ylabel={$\phi_{\mathrm{o}}(t)$},
ymajorgrids,
yminorgrids,
name=plot4,
at=(plot1.below south west), anchor=above north west]

\end{axis}

\begin{axis}[%
width=3cm,
height=3cm,
scale only axis,
every x tick label/.append style={font=\scriptsize\color{gray!80!black}},
xmin=0, xmax=20000,
xlabel={$t$},
xmajorgrids,
xminorgrids,
every y tick label/.append style={font=\scriptsize\color{gray!80!black}},
ymin=2000, ymax=12000,
ylabel={$p_{\mathrm{i}}(t)$},
ymajorgrids,
yminorgrids,
name=plot5,
at=(plot4.right of north east), anchor=left of north west]

\end{axis}

\end{tikzpicture}
\end{document}

这将创建以下情节:

使用 x-yshift 时不带任何间距。

我认为图之间的垂直/水平间距太小。我想增加它。目前我使用 x-yshift,这会产生以下结果:

\documentclass{standalone}
\usepackage{graphics}
\usepackage{tikz,pgfplots}
\pgfplotsset{compat=1.6}
\begin{document}
\begin{tikzpicture}

\begin{axis}[%
width=3cm,
height=3cm,
scale only axis,
every x tick label/.append style={font=\scriptsize\color{gray!80!black}},
xmin=0, xmax=20000,
xlabel={$t$},
xmajorgrids,
xminorgrids,
every y tick label/.append style={font=\scriptsize\color{gray!80!black}},
ymin=0.0004, ymax=0.0012,
ylabel={$\phi_{\mathrm{i}}(t)$},
ymajorgrids,
yminorgrids,
name=plot1]

\end{axis}

\begin{axis}[%
xshift=1cm,
width=3cm,
height=3cm,
scale only axis,
every x tick label/.append style={font=\scriptsize\color{gray!80!black}},
xmin=0, xmax=20000,
xlabel={$t$},
xmajorgrids,
xminorgrids,
every y tick label/.append style={font=\scriptsize\color{gray!80!black}},
ymin=0.2, ymax=1.2,
ylabel={$h(t)$},
ymajorgrids,
yminorgrids,
name=plot2,
at=(plot1.right of north east), anchor=left of north west]

\end{axis}

\begin{axis}[%
yshift=-1cm,
width=3cm,
height=3cm,
scale only axis,
every x tick label/.append style={font=\scriptsize\color{gray!80!black}},
xmin=0, xmax=20000,
xlabel={$t$},
xmajorgrids,
xminorgrids,
every y tick label/.append style={font=\scriptsize\color{gray!80!black}},
ymin=0.0004, ymax=0.0012,
ylabel={$\phi_{\mathrm{o}}(t)$},
ymajorgrids,
yminorgrids,
name=plot4,
at=(plot1.below south west), anchor=above north west]

\end{axis}

\begin{axis}[%
xshift=1cm,
width=3cm,
height=3cm,
scale only axis,
every x tick label/.append style={font=\scriptsize\color{gray!80!black}},
xmin=0, xmax=20000,
xlabel={$t$},
xmajorgrids,
xminorgrids,
every y tick label/.append style={font=\scriptsize\color{gray!80!black}},
ymin=2000, ymax=12000,
ylabel={$p_{\mathrm{i}}(t)$},
ymajorgrids,
yminorgrids,
name=plot5,
at=(plot4.right of north east), anchor=left of north west]

\end{axis}

\end{tikzpicture}
\end{document}

使用 x- yshift 进行间距

我想知道是否有更一致的方式来做到这一点。

答案1

你可能想看看图书馆groupplots(见文档5.5 分组图)。

group size它允许您通过选择(例如,针对您的情况)或直接选择和group size= 2 by 2的数量在网格中部署图形。然后,您可以通过键和自定义图形之间的水平和垂直距离。rowscolumnshorizontal sepvertical sep

对于您来说,一个可能的解决方案是:

\documentclass{standalone}
\usepackage{graphics}
\usepackage{pgfplots}
\usepgfplotslibrary{groupplots}
\pgfplotsset{compat=1.6}
\begin{document}
\begin{tikzpicture}
\begin{groupplot}[group style={group size=2 by 2, horizontal sep=2cm, vertical sep=2cm}]

\nextgroupplot[%
width=3cm,
height=3cm,
scale only axis,
every x tick label/.append style={font=\scriptsize\color{gray!80!black}},
xmin=0, xmax=20000,
xlabel={$t$},
xmajorgrids,
xminorgrids,
every y tick label/.append style={font=\scriptsize\color{gray!80!black}},
ymin=0.0004, ymax=0.0012,
ylabel={$\phi_{\mathrm{i}}(t)$},
ymajorgrids,
yminorgrids]
\addplot coordinates{(0,0.0005)(15000,0.001)};

\nextgroupplot[%
width=3cm,
height=3cm,
scale only axis,
every x tick label/.append style={font=\scriptsize\color{gray!80!black}},
xmin=0, xmax=20000,
xlabel={$t$},
xmajorgrids,
xminorgrids,
every y tick label/.append style={font=\scriptsize\color{gray!80!black}},
ymin=0.2, ymax=1.2,
ylabel={$h(t)$},
ymajorgrids,
yminorgrids]
\addplot coordinates{(0,0.5)(15000,1)};

\nextgroupplot[%
width=3cm,
height=3cm,
scale only axis,
every x tick label/.append style={font=\scriptsize\color{gray!80!black}},
xmin=0, xmax=20000,
xlabel={$t$},
xmajorgrids,
xminorgrids,
every y tick label/.append style={font=\scriptsize\color{gray!80!black}},
ymin=0.0004, ymax=0.0012,
ylabel={$\phi_{\mathrm{o}}(t)$},
ymajorgrids,
yminorgrids]
\addplot coordinates{(1000,0.0004)(15000,0.001)};

\nextgroupplot[%
width=3cm,
height=3cm,
scale only axis,
every x tick label/.append style={font=\scriptsize\color{gray!80!black}},
xmin=0, xmax=20000,
xlabel={$t$},
xmajorgrids,
xminorgrids,
every y tick label/.append style={font=\scriptsize\color{gray!80!black}},
ymin=2000, ymax=12000,
ylabel={$p_{\mathrm{i}}(t)$},
ymajorgrids,
yminorgrids]
\addplot coordinates{(5000,2010)(19000,11500)};

\end{groupplot}

\end{tikzpicture}
\end{document}

结果:

在此处输入图片描述

答案2

由于矩阵对齐不合适,您仍然可以依靠标准 LaTeX 框对齐与 相结合\centering。这将自动对齐您的图像 - 并且它会自动确保最后一行独立居中。

事实上,从编写和维护代码的角度来看,这相当简单,并且它还可以生成单独的、独立的图像(与单个、巨大、复杂的图片相比,这是我一直喜欢的)。

这是我针对您的示例所想到的(请参阅下面的解释):

\documentclass{article}
\usepackage[left=2cm,right=2cm]{geometry}
\usepackage{graphics}
\usepackage{tikz,pgfplots}
\pgfplotsset{compat=1.6}
\begin{document}
\thispagestyle{empty}

\centering

\tikzset{trim axis left,trim axis right}
\def\distance{2cm}%

\dotfill
\begin{tikzpicture}

\begin{axis}[%
width=3cm,
height=3cm,
scale only axis,
every x tick label/.append style={font=\scriptsize\color{gray!80!black}},
xmin=0, xmax=20000,
xlabel={$t$},
xmajorgrids,
xminorgrids,
every y tick label/.append style={font=\scriptsize\color{gray!80!black}},
ymin=0.0004, ymax=0.0012,
ylabel={$\phi_{\mathrm{i}}(t)$},
ymajorgrids,
yminorgrids,
name=plot1]

\end{axis}
\end{tikzpicture}%
\hspace{\distance}%
\begin{tikzpicture}

\begin{axis}[%
width=3cm,
height=3cm,
scale only axis,
every x tick label/.append style={font=\scriptsize\color{gray!80!black}},
xmin=0, xmax=20000,
xlabel={$t$},
xmajorgrids,
xminorgrids,
every y tick label/.append style={font=\scriptsize\color{gray!80!black}},
ymin=0.0004, ymax=0.0012,
ylabel={$\phi_{\mathrm{i}}(t)$},
ymajorgrids,
yminorgrids,
name=plot1]

\end{axis}
\end{tikzpicture}%
\hspace{\distance}%
%
\begin{tikzpicture}
\begin{axis}[%
width=3cm,
height=3cm,
scale only axis,
every x tick label/.append style={font=\scriptsize\color{gray!80!black}},
xmin=0, xmax=20000,
xlabel={$t$},
xmajorgrids,
xminorgrids,
every y tick label/.append style={font=\scriptsize\color{gray!80!black}},
ymin=0.2, ymax=1.2,
ylabel={$h(t)$},
ymajorgrids,
yminorgrids,
name=plot2,
]

\end{axis}
\end{tikzpicture}%
\dotfill
\vspace{1.2cm}%

\dotfill
%
\begin{tikzpicture}
\begin{axis}[%
width=3cm,
height=3cm,
scale only axis,
every x tick label/.append style={font=\scriptsize\color{gray!80!black}},
xmin=0, xmax=20000,
xlabel={$t$},
xmajorgrids,
xminorgrids,
every y tick label/.append style={font=\scriptsize\color{gray!80!black}},
ymin=0.0004, ymax=0.0012,
ylabel={$\phi_{\mathrm{o}}(t)$},
ymajorgrids,
yminorgrids,
name=plot4,
]

\end{axis}
\end{tikzpicture}%
\hspace{\distance}%
%
\begin{tikzpicture}
\begin{axis}[%
width=3cm,
height=3cm,
scale only axis,
every x tick label/.append style={font=\scriptsize\color{gray!80!black}},
xmin=0, xmax=20000,
xlabel={$t$},
xmajorgrids,
xminorgrids,
every y tick label/.append style={font=\scriptsize\color{gray!80!black}},
ymin=2000, ymax=12000,
ylabel={$p_{\mathrm{i}}(t)$},
ymajorgrids,
yminorgrids,
name=plot5,
]

\end{axis}

\end{tikzpicture}%
\dotfill

\end{document}

在此处输入图片描述

关键思想是生成五张单独的图片。前三张图片相隔 ,从而\hspace{\distance}产生所需的距离。你看,我将 定义\distance2cm

然后,该行以新段落结束。第二行包含两张图片,它们之间\hspace{\distance}也以 分隔。此外,垂直距离由 定义\vspace

由于完整的内容已在 之后排版\centering,因此各行将单独居中(事实上,\centering在我的例子中,由于\dotfills 而变得多余。但我想您无论如何都会删除它们,请参见下文)。

对齐有一个挑战:轴描述的大小很容易不同。然而,眼睛总是被轴框吸引——所以我们应该在轴框上对齐,即使刻度标签或轴标签会导致不同的对齐方式。因此,我写了一行

\tikzset{trim axis left,trim axis right}

适用于全部以下图片(直到下一个右括号或\end{...})。此语句使 TikZ 排除轴左侧的所有内容和轴右侧的所有内容。这需要手动控制间距。此外,它可以在边距中产生轴描述。但我相信它仍然是一个非常有用的功能。s\dotfill显示结果:它们表示左侧和右侧边界框的末端。您可以删除它们,它们只是为了说明目的。

请注意,您可以\pgfplotsset{<common options>}在图片前面写一个(或使用通用样式键)。这些选项将应用于所有后续图片,直到下一个右花括号或\end{...}

就我个人而言,我发现这种对齐方式非常吸引人,因为您可以轻松地将单个图片复制粘贴到其他文档中(当然,与共享选项集一起),并且它可以让 LaTeX 完成对齐工作。可以将相同的方法与标准 LaTeX 结合使用tabular- 就像 一样\includegraphics,只是trim left, trim right允许强大的差异。

啊 - 你可能想添加baseline到第一个\tikzset。它将自动控制垂直的相邻图片的对齐。

相关内容