我无法让 pgfplots 显示所有 y 刻度标签的相同指数。目前,我的 y 轴如下所示:
但是,我希望每个 y 刻度都有相同的指数,所以0.5*10^5
和0*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}