pgfplots:所有刻度标签的指数相同

pgfplots:所有刻度标签的指数相同

我无法让 pgfplots 显示所有 y 刻度标签的相同指数。目前,我的 y 轴如下所示:

但是,我希望每个 y 刻度都有相同的指数,所以0.5*10^50*10^5(或者只是0没有指数)。

梅威瑟:

\documentclass{standalone}

\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{compat=1.17}

\begin{document}
\begin{tikzpicture}
    \begin{axis}[
            ymin=0,
            ymax=200000,
            scaled ticks=false,
            yticklabel style={/pgf/number format/sci},
        ]
    
        \addplot coordinates {(0, 0)};
    \end{axis}
\end{tikzpicture}
\end{document}

提前非常感谢您!

答案1

relative*您可以使用\pgfmathprintnumber命令提供的pgfplotstable包(并由 pgfplots 使用)。根据文档,此选项将 \pgfmathprintnumber 配置为相对于数量级 10^r 的数字格式,其中 r 是整数。

\documentclass{standalone}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{compat=1.17}

\begin{document}
\begin{tikzpicture}
    \begin{axis}[
            ymin=0,
            ymax=200000,
            scaled ticks=false,
            yticklabel style={
              /pgf/number format/relative*=5,
            },
        ]
    
        \addplot coordinates {(0, 0)};
    \end{axis}
\end{tikzpicture}
\end{document}

在此处输入图片描述

如果 50,000 这个数字不令人满意,您可以使用命令提供解析和格式化数字的命令yticklabel。例如,您可以使用\num来自希尼奇包,有许多用于格式化数字的选项:

\usepackage{pgfplots}
\pgfplotsset{compat=1.17}
\usepackage{siunitx}

\begin{document}
\begin{tikzpicture}
    \begin{axis}[
            ymin=0,
            ymax=200000,
            scaled ticks=false,
            yticklabel={
              \num[
                round-mode=figures,
                scientific-notation=fixed,
                fixed-exponent=5
              ]{\tick}
            },
        ]
    
        \addplot coordinates {(0, 0)};
    \end{axis}
\end{tikzpicture}
\end{document}

在此处输入图片描述

编辑:处理 0 刻度标签。

\begin{document}
\begin{tikzpicture}
    \begin{axis}[
            ymin=0,
            ymax=200000,
            scaled ticks=false,
            yticklabel={
              \pgfmathtruncatemacro\tickint\tick
              \ifnum\tickint=0
                \num{0.0e5}
              \else
                \num[
                  round-mode=figures,
                  scientific-notation=fixed,
                  fixed-exponent=5
                ]{\tick}
              \fi
            },
        ]
    
        \addplot coordinates {(0, 0)};
    \end{axis}
\end{tikzpicture}
\end{document}

在此处输入图片描述

请注意,如果 y 轴的值较低,您可以使用\dim\tick pt=0pt而不是\ifnum,但在这种情况下,此解决方案会出现错误dim too large

答案2

我能做的最好的事情(到目前为止):

\documentclass[border=1cm]{standalone}

\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{compat=1.17}
\usepackage{pgfplotstable}

\begin{document}
\pgfplotstableset{fixed zerofill,precision=1}
\begin{tikzpicture}
    \begin{axis}[
            ymin=0,
            ymax=200000,
            xmin=-0.1,
            xmax=4.1,
            x tick label style={/pgf/number format/fixed,/pgf/number format/precision=0},
            scaled ticks=true,
            yticklabel style={
                /pgf/number format/fixed,
                /pgf/number format/precision=1
            },
        ]   
        \addplot coordinates {(3, 50000)};
    \end{axis}
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案3

您所要求的功能是默认PGFPlots 的行为。因此,除了“零填充”之外,您还可以使用以下代码获得完全相同的结果。

% used PGFPlots v1.18.1
\documentclass[border=5pt]{standalone}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
    \begin{axis}[
        ymin=0,
        ymax=200000,
        xmin=-0.1,
        xmax=4.1,
%        yticklabel style={
%            /pgf/number format/fixed zerofill,
%            /pgf/number format/precision=1,
%        },
    ]
        \addplot coordinates {(3, 50000)};
    \end{axis}
\end{tikzpicture}
\end{document}

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

相关内容