堆叠和非堆叠 ybar 图的对齐 xticklabels

堆叠和非堆叠 ybar 图的对齐 xticklabels

我正在并排绘制堆叠和非堆叠 ybar 图。我很难让两个图之间的 xticklabel 对齐。

\documentclass[a4paper]{article}
\usepackage{pgfplots}
\pgfplotsset{compat=1.5}

\begin{document}
\pgfplotsset{every axis/.append style={
        scale only axis=true,
        xtick={0,1}, xticklabels={a, b},
        height=2cm, width=2cm, xmin=-0.5, xmax=1.5,
        xticklabel style={text height=1.5ex}% <-- to align the characters a and b with different height
}}

\begin{tikzpicture}
    \begin{axis}[ybar stacked]
    \addplot coordinates {(0,1) (1,1)};
    \addplot coordinates {(0,0.5) (1,2)};
    \end{axis}

    \begin{axis}[ybar, shift={(2.8cm, 0)}]
        \addplot coordinates {(0,1) (1,1)};
        \addplot coordinates {(0,0.5) (1,2)};
    \end{axis}
    \end{tikzpicture}
\end{document}

这个基本设置失败是因为堆叠条形图默认不包含 xtick 标签,而其他条形图则包含:

在此处输入图片描述

我尝试通过设置major tick length=-1mm堆叠图和major tick length=1mm另一个图来解决此问题:

在此处输入图片描述

这修复了 x 刻度长度,但 x 刻度标签仍然未对齐。我还尝试调整传递给轴参数的节点参数xticklabel style={at={(...)}, anchor=...},但无济于事。

在这种情况下,如何获得对齐的刻度标签?

答案1

我猜你不是

由于堆叠条形图不包含xtick 标签默认情况下,而其他人则

你的意思是

由于堆叠条形图不包含横轴刻度默认情况下,而其他人则

但事实并非如此,正如你在 x 轴顶部看到的刻度看得到。如果还要在(下)x 轴上看到它们,只需添加axis on top因为——正如选项所示——轴是在图上绘制的,而不是反过来。或者,您也可以不填充条形图。同样,您会看到刻度绘制.但默认情况下它们被绘制里面堆积条形图的轴(就像 y 轴一样)。

因此,简单的解决方案是强制绘制xticks内部或外部。在下面的代码中,我选择只绘制xticks内部。

% used PGFPlots v1.16
\documentclass[border=5pt]{standalone}
\usepackage{pgfplots}
    \pgfplotsset{
        every axis/.append style={
            axis on top,            % to show that `xticks` are drawn `inside`
            xtick align=outside,    % force all `xticks` to be drawn `outside`
            scale only axis=true,
            xtick={0,1},
            xticklabels={a, b},
            height=2cm,
            width=2cm,
            xmin=-0.5,
            xmax=1.5,
            % to align the characters a and b with different height
            xticklabel style={
                text height=1.5ex,
            },
        },
    }
\begin{document}
\begin{tikzpicture}
    \begin{axis}[ybar stacked]
        \addplot coordinates {(0,1) (1,1)};
        \addplot coordinates {(0,0.5) (1,2)};
    \end{axis}

    \begin{axis}[ybar, shift={(2.8cm, 0)}]
        \addplot coordinates {(0,1) (1,1)};
        \addplot coordinates {(0,0.5) (1,2)};
    \end{axis}
\end{tikzpicture}
\end{document}

该图显示了上述代码的结果

相关内容