我的 PGFplot 中的 xticks 有问题,我不知道该如何开始排除故障。刻度标签重复且错位;基本上它们到处都是。
\documentclass{standalone}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\usepackage{amsmath}
\pgfplotsset{compat=newest}
\usepackage{filecontents}
\begin{filecontents*}{iso.tsv}
range X Y Z
0--9 9841063 9847764 9840032
10--99 38622 32503 39579
100--999 3116 2672 3197
1000--9999 6054 6019 6057
10000--99999 563 460 553
100000+ 0.1 0.1 0.1
\end{filecontents*}
\begin{document}
\def\mystrut{\vphantom{$[1^1$}}
\pgfplotstableread{iso.tsv}\mydata
\begin{tikzpicture}
\begin{axis}[
ymode = log,
ybar,
ytick={10,100,1000,10000,100000,1000000,10000000},
xtick style={draw=none},
bar width=.35cm,
width=15cm,
height=6cm,
ymajorgrids=true,
yminorgrids=false,
legend style={font=\footnotesize},
legend style={at={(0.99,0.99)},
anchor=north east,legend columns=1},
symbolic x coords={0--9,10--99,100--999,1000--9999,10000--99999,100000+},
x tick label style={font=\mystrut},
%xticklabels={a,b,c,d,e,f},
ymin=1,ymax=15000000,
ylabel={Number of graphs},
xlabel={Time taken (ms)},
%enlarge x limits=1
]
\addplot table[x=range,y=X]{\mydata};
\addplot table[x=range,y=Y]{\mydata};
\addplot table[x=range,y=Z]{\mydata};
\legend{X, Y, Z}
\end{axis}
\end{tikzpicture}
\end{document}
我确信这一定是一件非常简单的事情,因为情节本身就很简单,但我似乎找不到它。非常感谢任何帮助(再次)!
答案1
symbolic x coords={0--9,10--99,100--999,1000--9999,10000--99999,100000+},
仅定义变换,以便此列表的元素是有效的输入坐标。
为了获得所需的结果,您可以使用xtick=data
。为确保最后一个具有非常小值的刻度也能使用,请添加xmax=100000+
。当然,您必须使用enlarge x limits
。
symbolic x coords={0--9,10--99,100--999,1000--9999,10000--99999,100000+},
xtick=data,
xmin=0--9,xmax=100000+,
enlarge x limits={abs={2*(\pgfplotbarwidth+2pt)}},
代码:
\documentclass{standalone}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\usepackage{amsmath}
\pgfplotsset{compat=newest}
\usepackage{filecontents}
\begin{filecontents*}{iso.tsv}
range X Y Z
0--9 9841063 9847764 9840032
10--99 38622 32503 39579
100--999 3116 2672 3197
1000--9999 6054 6019 6057
10000--99999 563 460 553
100000+ 0.1 0.1 0.1
\end{filecontents*}
\begin{document}
\def\mystrut{\vphantom{$[1^1$}}
\pgfplotstableread{iso.tsv}\mydata
\begin{tikzpicture}
\begin{axis}[
ymode = log,
ybar,
ytick={10,100,1000,10000,100000,1000000,10000000},
xtick style={draw=none},
bar width=.35cm,
width=15cm,
height=6cm,
ymajorgrids=true,
yminorgrids=false,
legend style={font=\footnotesize},
legend style={at={(0.99,0.99)},
anchor=north east,legend columns=1},
symbolic x coords={0--9,10--99,100--999,1000--9999,10000--99999,100000+},
xtick=data,
xmin=0--9,xmax=100000+,
enlarge x limits={abs={2*(\pgfplotbarwidth+2pt)}},
x tick label style={font=\mystrut},
ymin=1,ymax=15000000,
ylabel={Number of graphs},
xlabel={Time taken (ms)},
]
\addplot table[x=range,y=X]{\mydata};
\addplot table[x=range,y=Y]{\mydata};
\addplot table[x=range,y=Z]{\mydata};
\legend{X, Y, Z}
\end{axis}
\end{tikzpicture}
\end{document}
也可以使用
symbolic x coords={0--9,10--99,100--999,1000--9999,10000--99999,100000+},
xtick={0--9,10--99,100--999,1000--9999,10000--99999,100000+},
xmin=0--9,xmax=100000+,
enlarge x limits={abs={2*(\pgfplotbarwidth+2pt)}},
结果和上面一样。
如果你添加
xticklabels={a,b,c,d,e,f},
你会得到