我想在 Pgfplots 图中的 x 刻度标签和 x 轴之间添加一些垂直空间。这可能吗?
背景:我使用 subfig 包将两个子图水平排列在一起。两个子图都包含一个 Pgfplot。左侧图使用对数 x 轴,因此刻度采用指数数字格式。右侧图使用线性刻度 x 轴,因此刻度为 0、100、600……因此,左侧图需要稍微多一点的垂直空间,因此与右侧图不垂直对齐。我的目标是通过添加一些\vphantom{}
或类似的东西使两个图垂直对齐。以下是产生问题的 MWE:
\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=1.12}
\usepackage{subfig}
\begin{document}
\begin{figure}[h]
\subfloat[Logarithmic horizontal axis]{
\begin{tikzpicture}
\begin{axis}[xmode=log, width=5cm, height=5cm]
\addplot
table[row sep=crcr]{%
1 1\\
1e6 2\\
};
\end{axis}
\end{tikzpicture}%
}%
\subfloat[Linear horizontal axis]{
\begin{tikzpicture}
\begin{axis}[ytick pos=right, width=5cm, height=5cm]
\addplot
table[row sep=crcr]{%
1 1\\
10 2\\
};
\end{axis}
\end{tikzpicture}%
}%
\end{figure}
\end{document}
这是 MWE 输出的屏幕截图,显示了垂直偏移:
答案1
一种解决方案是指定xticklabel style
以便用 来移动它yshift=-2pt
,即:
...
\subfloat[Linear horizontal axis]{
\begin{tikzpicture}
\begin{axis}[
ytick pos=right, width=5cm, height=5cm,
xticklabel style={yshift=-2pt},% <--- add in second subfigure
]
\addplot
table[row sep=crcr]{%
1 1\\
10 2\\
};
\end{axis}
\end{tikzpicture}%
}%
...
答案2
正如@LaRiFaRi所建议的,可以使用Pgfplots键以编程方式定义x刻度标签xticklabel
。 因此,将以下选项添加到第二个轴即可解决问题:
xticklabel={\axisdefaultticklabel\vphantom{$10^6$}}
我使用了预定义命令\axisdefaultticklabel
,该命令仅打印通常的刻度标签,并添加了与左侧对数轴刻度标签高度相对应的额外空间。以下是此解决方案的完整 MWE
\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=1.12}
\usepackage{subfig}
\begin{document}
\begin{figure}[h]
\subfloat[Logarithmic horizontal axis]{
\begin{tikzpicture}
\begin{axis}[xmode=log, width=5cm, height=5cm]
\addplot
table[row sep=crcr]{%
1 1\\
1e6 2\\
};
\end{axis}
\end{tikzpicture}%
}%
\subfloat[Linear horizontal axis]{
\begin{tikzpicture}
\begin{axis}[
ytick pos=right, width=5cm, height=5cm,
xticklabel={\axisdefaultticklabel\vphantom{$10^6$}}
]
\addplot
table[row sep=crcr]{%
1 1\\
10 2\\
};
\end{axis}
\end{tikzpicture}%
}%
\end{figure}
\end{document}
这是结果的截图