x 轴标签与 pgfplots 中的数据不同

x 轴标签与 pgfplots 中的数据不同

在下面的代码中,我希望 x 轴的标签为 128,256,1024,2048,4096。但是,当我编译它时,我得到的是 128,256,1020,2050,4100。我遗漏了什么?

\documentclass{article}
\usepackage{pgfplots}
\usepackage{amsmath}
\pgfplotsset{compat=1.14}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
    xlabel={x},
    ylabel={y},
    width=260pt,
    x tick label style={major tick length=0pt},
    xmode=log,
    log ticks with fixed point,
    xtick=data,
    ytick={9,10,11,12,13,14,15,16,17,18,19,20},
    minor y tick num=1,
    ymajorgrids,
    legend style={at={(0.5,0.97)},
    legend entries={{$\epsilon=\tfrac{1}{17}$,},{$\epsilon=\tfrac{1}{16}$,},{$\epsilon=\tfrac{1}{15}$,},$\epsilon=\tfrac{1}{14}$},
    anchor=north,legend columns=-1},
    ybar,
    bar width=5pt,
  ]
  \addplot[fill=red!80,
     error bars/.cd, 
     y dir=plus, 
     y explicit,
    ]
   plot coordinates { 
       (128,9.217) += (0,4.783)
       (256,10.128) += (0,4.872)
       (512,11.125) += (0,5.875)
       (1024,11.918) += (0,5.082)
       (2048,12.785) += (0,5.215)
       (4096,13.994) += (0,5.006)
   };
 \end{axis}
 \end{tikzpicture}
 \end{document}

答案1

我知道,这种方法快捷又简单,但目前您可以使用 xticklabels={128,256,512,1024,2048,4096}(或者xticklabels={128,256,512,{1,024},{2,048},{4,096}},如果您更喜欢千位分隔符)。

答案2

无需检查定义,log ticks with fixed point我猜想显示的结果是因为数字的一些舍入。因此,只需定义您自己的样式并选择所需的舍入即可。

有关详细信息,请查看代码中的注释。

% used PGFPlots v1.15
\documentclass[border=5pt]{standalone}
\usepackage{amsmath}
\usepackage{pgfplots}
    \pgfplotsset{
        compat=1.14,
        % define your own x tick label style
        % (adapted from <https://tex.stackexchange.com/a/139084/95441>)
        log x ticks with fixed point/.style={
            xticklabel={
                \pgfkeys{/pgf/fpu=true}
                \pgfmathparse{exp(\tick)}%
                \pgfmathprintnumber[fixed,precision=0]{\pgfmathresult}
                \pgfkeys{/pgf/fpu=false}
            },
        },
    }
\begin{document}
\begin{tikzpicture}
    \begin{axis}[
        xlabel={$x$},
        ylabel={$y$},
        width=260pt,
        xmode=log,
        % replace the "default" style ...
%        log ticks with fixed point,
        % ... with the custom style
        log x ticks with fixed point,
        xtick=data,
        x tick label style={
            major tick length=0pt,
        },
        ytick={9,...,20},
        minor y tick num=1,
        ymajorgrids,
        legend style={
            at={(0.5,0.97)},
            anchor=north,
            legend columns=-1,
        },
        legend entries={
            {$\epsilon=\tfrac{1}{17}$,},
            {$\epsilon=\tfrac{1}{16}$,},
            {$\epsilon=\tfrac{1}{15}$,},
            $\epsilon=\tfrac{1}{14}$%
        },
        ybar,
        bar width=5pt,
    ]
        \addplot[
            fill=red!80,
            error bars/.cd,
                y dir=plus,
                y explicit,
        ]  coordinates {
           (128,9.217)   += (0,4.783)
           (256,10.128)  += (0,4.872)
           (512,11.125)  += (0,5.875)
           (1024,11.918) += (0,5.082)
           (2048,12.785) += (0,5.215)
           (4096,13.994) += (0,5.006)
        };
     \end{axis}
 \end{tikzpicture}
 \end{document}

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

相关内容