pgfplots 指数在 ylabel 而不是 yticklabel 中

pgfplots 指数在 ylabel 而不是 yticklabel 中

我知道已经有很多关于刻度标签指数以及如何消除它们的问题得到了解答,但经过广泛的搜索,我还是无法找到我特定问题的答案。
请看以下示例:

\documentclass[crop,10pt]{standalone}
\usepackage[english]{babel}
\usepackage{pgfplots}

\usepackage[space-before-unit,range-units = repeat]{siunitx}

\begin{document}%
    \setlength{\linewidth}{246pt}%

        \begin{tikzpicture}
        \begin{axis}[
        width=\linewidth,
        ytick pos = left,
        xtick pos = left,
        enlargelimits=false,
        clip=false,
        axis on top,
        tick align = outside,
        yticklabel style={%
        /pgf/number format/fixed,
        /pgf/number format/precision=1,
        /pgf/number format/fixed zerofill
    },
        xlabel={length (\si{\meter})},
        ylabel={length (\si{\meter})},
]
        \addplot
        coordinates
        {(1,0.0005) (2,0.001)   (3,0.0015)};
        \end{axis}
        \end{tikzpicture}
\end{document}

图表和刻度标签看起来就像我想要的那样。我现在唯一想做的就是去掉 y 轴上方的“ *10^{-3} ”并(手动)将 ylabel 更改为毫米。当我使用该选项时scaled ticks=false,这将再次更改刻度标签,我必须将它们显示为 0.0005、0.0010 和 0.0015,而不是 0.5、1.0 和 1.5,这看起来很丑。所以问题是:有没有办法去掉指数(不显示它)而不改变刻度标签?(当然,任何其他解决方案也会受到赞赏)
谢谢你的帮助,
约翰

答案1

这正是units图书馆的用途。

它允许您为轴指定 SI 基本单位(在本例中为y unit=m),如果您允许库更改数字的基数(通过设置change y base=true),您可以指定将应用于标签和数字的 SI 前缀(通过设置y SI prefix=milli)。

可以使用 来控制标签中单位的格式unit markings=parenthesis,例如:

\documentclass[border=5mm]{standalone}
\usepackage[english]{babel}
\usepackage{pgfplots}
\usepgfplotslibrary{units}

\usepackage[space-before-unit,range-units = repeat]{siunitx}

\begin{document}%
    \setlength{\linewidth}{246pt}%

        \begin{tikzpicture}
        \begin{axis}[
        width=\linewidth,
        ytick pos = left,
        xtick pos = left,
        enlargelimits=false,
        clip=false,
        axis on top,
        tick align = outside,
        unit markings=parenthesis,
        y unit=m, change y base=true,  y SI prefix=milli,
        yticklabel style={%
        /pgf/number format/fixed,
        /pgf/number format/precision=1,
        /pgf/number format/fixed zerofill
        },
        xlabel={length (\si{\meter})},
        ylabel={length},
]
        \addplot
        coordinates
        {(1,0.0005) (2,0.001)   (3,0.0015)};
        \end{axis}
        \end{tikzpicture}
\end{document}

答案2

您可以使用ytick scale label code/.code={}

\documentclass[crop,10pt]{standalone}
\usepackage[english]{babel}
\usepackage{pgfplots}

\usepackage[space-before-unit,range-units = repeat]{siunitx}

\begin{document}%
    \setlength{\linewidth}{246pt}%

        \begin{tikzpicture}
        \begin{axis}[
        width=\linewidth,
        ytick pos = left,
        xtick pos = left,
        enlargelimits=false,
        clip=false,
        axis on top,
        tick align = outside,
        yticklabel style={%
        /pgf/number format/fixed,
        /pgf/number format/precision=1,
        /pgf/number format/fixed zerofill
    },
        xlabel={length (\si{\meter})},
        ylabel={length (\si{\meter})},
        ytick scale label code/.code={}
]
        \addplot
        coordinates
        {(1,0.0005) (2,0.001)   (3,0.0015)};
        \end{axis}
        \end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容