PGFplots 中的 xticks 重复且未对齐

PGFplots 中的 xticks 重复且未对齐

我的 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},

你会得到

在此处输入图片描述

相关内容