以下是我迄今为止尝试过的代码
\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}