如何反转 pgfplots 中 y 标签的顺序

如何反转 pgfplots 中 y 标签的顺序

我怎样才能反转 y 标签的顺序?类别 A 应位于顶部,类别 N 应位于底部。

我的文件datatable.txt

one two three
A   2   0.3
B   3   0.4
C   4   0.5
D   5   0.6
E   4   0.7
F   3   0.6
G   2   0.5
H   3   0.4
I   4   0.3
J   5   0.4
K   4   0.5
L   3   0.6
M   2   0.7
N   3   0.6

我的代码:

\documentclass{article}

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

\begin{document}

\begin{figure}[h!]
\centering
\begin{tikzpicture}

\begin{axis}[
    xbar,
    xmin=1,
    xmax=6,
    ytick=data,
    yticklabels from table={datatable.txt}{one}
]
\addplot plot [error bars/.cd, x dir = both, x explicit] table [x=two, y expr=\coordindex, x error = three] {datatable.txt};
\end{axis}
\end{tikzpicture}
\caption{xbars and standard deviations}
\end{figure}

\end{document}

答案1

实现此目的的两个简单方法是

  • 要么添加y dir=reverseaxis环境选项,
  • 或者写y expr=-\coordindex(注意添加的减号)。

\begin{filecontents*}{datatable.txt}
one two three
A   2   0.3
B   3   0.4
C   4   0.5
D   5   0.6
E   4   0.7
F   3   0.6
G   2   0.5
H   3   0.4
I   4   0.3
J   5   0.4
K   4   0.5
L   3   0.6
M   2   0.7
N   3   0.6
\end{filecontents*}
\documentclass[border=5pt]{standalone}
\usepackage{pgfplots}
    \pgfplotsset{
        my axis style/.style={
            xbar,
            xmin=1,
            xmax=6,
            ytick=data,
            yticklabels from table={datatable.txt}{one},
            error bars/x dir=both,
            error bars/x explicit,
        },
    }
\begin{document}
\begin{tikzpicture}
    \begin{axis}[
        my axis style,
        y dir=reverse,              % <-- added style
    ]
        \addplot table [
            x=two,
            y expr=\coordindex,
            x error=three,
        ] {datatable.txt};
    \end{axis}
\end{tikzpicture}
\begin{tikzpicture}
    \begin{axis}[
        my axis style,
    ]
        \addplot table [
            x=two,
            y expr=-\coordindex,    % <-- added minus sign
            x error=three,
        ] {datatable.txt};
    \end{axis}
\end{tikzpicture}
\end{document}

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

答案2

可以通过按绘图所需的顺序声明 来重新排序 y 轴symbolic y cords。然后,您需要删除yticklabels from table并替换y expr=\coordindexy=one,对应于标识每个 xbar 的标签。为了使 MWE 自成体系,数据被合并到文件中并使用 读取\pgfplotstable

结果如下:

在此处输入图片描述

这是代码:

\documentclass{article}

\usepackage{pgfplots}
\usepackage{pgfplotstable}

\pgfplotstableread[header=true]{
    one two three
    A   2   0.3
    B   3   0.4
    C   4   0.5
    D   5   0.6
    E   4   0.7
    F   3   0.6
    G   2   0.5
    H   3   0.4
    I   4   0.3
    J   5   0.4
    K   4   0.5
    L   3   0.6
    M   2   0.7
    N   3   0.6
}\data

\pgfplotsset{compat=newest, width=10cm, height=10cm}

\begin{document}
\begin{figure}[h!]
\centering
\begin{tikzpicture}

\begin{axis}[
    xbar,
    xmin=1,
    xmax=6,
    symbolic y coords={N,M,L,K,J,I,H,G,F,E,D,C,B,A},
    ytick=data,
]
\addplot [
   error bars/.cd,
   x dir = both,
   x explicit,
   ] table [
   x=two,
   y=one, 
   x error = three
   ] {\data};
\end{axis}
\end{tikzpicture}
\caption{xbars and standard deviations}
\end{figure}

\end{document}

相关内容