pgfplots 多个 addplots 符号 x 轴标签错位

pgfplots 多个 addplots 符号 x 轴标签错位

以下是我迄今为止尝试过的代码

\begin{figure}
    \centering
    \begin{tikzpicture} 
    \begin{axis}
        [
            ybar,
            error bars/.cd,
            ylabel = Score,
            symbolic x coords={A1, A2, B1, B2, C1,C2,C3,C4, C5},
            xtick = {A1, A2, B1, B2, C1,C2,C3,C4, C5},
            xticklabel style = {rotate=90,anchor=east},
            bar width=14pt,
            enlarge x limits=0.2,
            legend style={
                at={(1,1.05)},
                anchor=south east,
                column sep=1ex
            }
        ] 
        \addplot+ [error bars/.cd,y dir=both, y explicit] coordinates {
            (A1,2) +- (0,0.4)
            (A2,1) +- (0,0.5) 
        };
        \addplot+ [error bars/.cd,y dir=both, y explicit] coordinates {

            (B1,3) +- (0,0.7) 
            (B2,2.50) +- (0,0.9) 
        };
        \addplot+ [error bars/.cd,y dir=both, y explicit] coordinates {
            (C1,2.4) +- (0,0.3) 
            (C2,2.5) +- (0,0.4) 
            (C3,2.2) +- (0,0.9)
            (C4,2.7) +- (0,0.5)
            (C5,2.8) +- (0,0.8)
        };

        
        \legend{A Level, B Level, C Leve}
    \end{axis}
    \end{tikzpicture}
    
    \caption{\textbf{test}}
    \label{fig:levelawareness}
\end{figure}

得到下面的图表,

在此处输入图片描述

如何使 x 轴标签与它们所代表的条形正确对齐?

答案1

错位是由于 PGF 根据分组将条形图左右移动。您有三个组,因此第一组向左移动,第三组向右移动。这在您修改后的图中可能会更好地显示,我(B1,1) +- (0,0.5)在第一张图和第三张图中都添加了此图:

在此处输入图片描述

如您所见,蓝色条始终位于刻度线左侧,而棕色条始终向右移动。

为了正确对齐所有内容,您需要使用 将条形的偏移设置为零bar shift=0pt。这样标签就会准确地放置在条形上。

不过,我假设您希望保持这三个组之间的距离,一个简单的方法就是添加额外的符号坐标。

我还建议添加ymax = 4将上线与刻度对齐的功能。

\documentclass{article}

\usepackage{pgfplots}
\pgfplotsset{compat=1.18}

\begin{document}
 
\begin{figure}
    \centering
    \begin{tikzpicture} 
    \begin{axis}
        [
            ybar,
            error bars/.cd,
            ylabel = Score,
            ymax = 4,
            symbolic x coords={A1, A2, x1, B1, B2, x2, C1, C2, C3, C4, C5},
            xtick = {A1, A2, B1, B2, C1, C2, C3, C4, C5},
            xticklabel style={rotate=90, anchor=east},
            bar width=14pt,
            enlarge x limits=0.1,
            legend style={
                at={(1,1.05)},
                anchor=south east,
                column sep=1ex
            },
            bar shift=0pt
        ] 
        \addplot+ [error bars/.cd, y dir=both, y explicit] coordinates {
            (A1,2) +- (0,0.4)
            (A2,1) +- (0,0.5) 
        };
        \addplot+ [error bars/.cd, y dir=both, y explicit] coordinates {
            (B1,3) +- (0,0.7) 
            (B2,2.50) +- (0,0.9) 
        };
        \addplot+ [error bars/.cd, y dir=both, y explicit] coordinates {
            (C1,2.4) +- (0,0.3) 
            (C2,2.5) +- (0,0.4) 
            (C3,2.2) +- (0,0.9)
            (C4,2.7) +- (0,0.5)
            (C5,2.8) +- (0,0.8)
        };
        
        \legend{A Level, B Level, C Level}
    \end{axis}
    \end{tikzpicture}
    
    \caption{\textbf{test}}
    \label{fig:levelawareness}
\end{figure}

\end{document}

在此处输入图片描述

相关内容