如何将标签置于 X 轴中央?

如何将标签置于 X 轴中央?

我想绘制 3 个评估的 2 个条形图。X 轴是符号,当您想要将标签置于 x 轴中央时,这似乎会引起很多问题。

在此处输入图片描述

除了中间的标签外,其他标签均未位于刻度值下方的中央。我认为这应该是一个相当简单的图。除了标签之外,图实际上就是我想要的。有人知道如何解决这个问题吗?

这是我的情节的 MWE

\documentclass{article}
\usepackage{tikz}
\usepackage{pgfplots, pgfplotstable}    

\begin{document}

\begin{figure}
\centering
\begin{tikzpicture}
  \begin{axis}[
        ymin=60,  
        ymax=100,
        ybar,
        enlarge x limits=0.4,
%        bar width=1mm, 
        width=11.5cm,
        height=10cm, 
        xlabel={Accuracy \%},
        symbolic x coords={A $\rightarrow$ B,B $\rightarrow$ C,C $\rightarrow$ D},
        xtick=data,
%       bar shift=0pt
  ]

%50.0 entries are dummies otherwise the other labels do not even appear on the axis
\addplot[fill=orange] coordinates {(A $\rightarrow$ B,96.0)(B $\rightarrow$ C,50.0)(C $\rightarrow$ D,50.0)};
\addplot[fill=black] coordinates {(A $\rightarrow$ B,92.3)(B $\rightarrow$ C,50.0)(C $\rightarrow$ D,50.0)};

\addplot[fill=orange] coordinates {(B $\rightarrow$ C,88.9)};
\addplot[fill=black] coordinates {(B $\rightarrow$ C,73.6)};

\addplot[fill=orange] coordinates {(C $\rightarrow$ D,90.6)};
\addplot[fill=black] coordinates {(C $\rightarrow$ D,80.8)};


\end{axis}
\end{tikzpicture}
\end{figure}

\end{document}

答案1

您有点误解了,不要使用虚拟值,而要使用其他addplots 中的实际数字,并完全删除最后四个\addplots。每个 s\addplot代表一系列值,对于条形图,pgfplots在每个 x 坐标处为所有系列留出空间。使用六个\addplots,pgfplots为六个条形留出空间,但您只能在每个坐标处填充其中两个。

\documentclass[border=5mm]{standalone}
\usepackage{tikz}
\usepackage{pgfplots, pgfplotstable}    

\begin{document}
\begin{tikzpicture}
  \begin{axis}[
        ymin=60,  
        ymax=100,
        ybar,
        enlarge x limits=0.4,
%        bar width=1mm, 
        width=11.5cm,
        height=10cm, 
        xlabel={Accuracy \%},
        symbolic x coords={A $\rightarrow$ B,B $\rightarrow$ C,C $\rightarrow$ D},
        xtick=data,
%       bar shift=0pt
  ]

\addplot[fill=orange] coordinates {(A $\rightarrow$ B,96.0)(B $\rightarrow$ C,88.9)(C $\rightarrow$ D,90.6)};
\addplot[fill=black] coordinates {(A $\rightarrow$ B,92.3)(B $\rightarrow$ C,73.6)(C $\rightarrow$ D,80.8)};

\end{axis}
\end{tikzpicture}
\end{document}

答案2

您的尝试已经接近尾声。作为参考,请查看手册第 84 页上的示例pgfplots。您需要更正要绘制的数据的组织方式。每个都addplot需要给出 A->B、B->C 和 C->D 的连续坐标系列。

这是生成所需图形的代码。

\documentclass{article}
\usepackage{tikz}
\usepackage{pgfplots, pgfplotstable}    

\begin{document}

\begin{figure}
\centering
\begin{tikzpicture}
  \begin{axis}[
        ymin=60,  
        ymax=100,
        ybar,
        enlarge x limits=0.4,
%        bar width=1mm, 
        width=11.5cm,
        height=10cm, 
        xlabel={Accuracy \%},
        symbolic x coords={A $\rightarrow$ B,B $\rightarrow$ C,C $\rightarrow$ D},
        xtick=data,
%       bar shift=0pt
  ]

\addplot[fill=orange] coordinates {(A $\rightarrow$ B,96.0) (B $\rightarrow$ C,88.9) (C $\rightarrow$ D,90.6)};
\addplot[fill=black] coordinates {(A $\rightarrow$ B,92.3) (B $\rightarrow$ C,73.6) (C $\rightarrow$ D,80.8)};
\end{axis}
\end{tikzpicture}
\end{figure}

\end{document}

在此处输入图片描述

相关内容