我正在尝试使我的数字格式pgfplots
与文档的其余部分相同。我通常\num
使用siunitx
包来排版数字,并且也想在我的图中使用它。
\num
不会产生与相同的格式\pgfmathprintnumber
,并且我已经尝试过这个(感谢@Jake 和@Marco Daniel):
\documentclass{standalone}
\usepackage{siunitx}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{semilogxaxis}
[
xmin=1, xmax=5000,
ymin=0, ymax=2,
log base 10 number format code/.code={ \pgfmathparse{10^(#1)}\num[round-mode=places, round-precision=0]{\pgfmathresult} }, %num version
% log base 10 number format code/.code={$\pgfmathparse{10^(#1)}\pgfmathprintnumber[set thousands separator=\,]{\pgfmathresult}$} %pgfmathprintnumber version
% yticklabel={\num[round-mode=places, round-precision=1]{\tick}} %does not work
]
\node at (axis cs: 10, 1.8) {\num[round-mode=places, round-precision=0]{12345678}};
\node at (axis cs: 10, 1.7) {\pgfmathprintnumber[int detect, set thousands separator=\,]{12345678}};
\node at (axis cs: 10, 1.4) {\num[round-mode=places, round-precision=0]{1000}};
\node at (axis cs: 10, 1.3) {\pgfmathprintnumber[int detect, set thousands separator=\,]{1000}};
\end{semilogxaxis}
\end{tikzpicture}
\end{document}
当 ymax<3 时,yticklabel 的代码会出现编译错误:
! Number too big. \l_siunitx_tmpa_tl ->5000000000
有没有解决这个问题的方法,或者有某种方法可以设置使用的全局数字格式pgfplots
?
这是失败的最小代码:
\documentclass{standalone}
\usepackage{siunitx}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{semilogxaxis}
[
xmin=1, xmax=5000,
ymin=0, ymax=2,
yticklabel={\num[round-mode=places, round-precision=1]{\tick}} %does not work
]
\end{semilogxaxis}
\end{tikzpicture}
\end{document}
答案1
正如评论中所述,发生这种情况是因为刻度值有时用很多尾随零定义,这在尝试舍入值dimension too large
时会导致错误。作为一种解决方法,您可以先通过使用解析它来清理值,然后让其执行其操作:siunitx
\pgfmathparse
\pgfmathparse{\tick*1}
\num
\pgfmathresult
\documentclass{standalone}
\usepackage{siunitx}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{semilogxaxis}
[
xmin=1, xmax=5000,
ymin=0, ymax=2,
yticklabel={\pgfmathparse{(\tick*1)}\num[round-mode=places, round-precision=1]{\pgfmathresult}}
]
\end{semilogxaxis}
\end{tikzpicture}
\end{document}