我怎样才能反转 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=reverse
到axis
环境选项, - 或者写
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=\coordindex
为y=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}