![使用fixedpointarithmeticTi钾Z 库](https://linux22.com/image/409388/%E4%BD%BF%E7%94%A8fixedpointarithmeticTi%E9%92%BEZ%20%E5%BA%93.png)
我有一个semilogyaxis
withlog ticks with fixed point
选项。我不喜欢的是 的标签1.013
被截断为1.01
。我尝试用/pgf/number format/precision
key 来解决这个问题,但没有帮助。你知道哪里出了问题吗?
\documentclass[tikz]{standalone}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{semilogyaxis}[log ticks with fixed point,xmin=0,xmax=400,ymin=1E-5,ymax=1E4,ytick={1E-5,6.1E-3,1.013,221,1E4},yticklabel style={/pgf/number format/precision=4}]
\end{semilogyaxis}
\end{tikzpicture}
\end{document}
答案1
默认情况下,/pgfplots/log ticks with fixed point
使用以下命令打印数字:
\pgfqkeys{/pgf/number format}{fixed relative, precision=3}
但是,它接受一个参数,该参数作为选项输入,\pgfmathprintnumber
并且可以覆盖这些默认值。因此,您的问题通常应该使用来解决log ticks with fixed point={precision=4}
。不幸的是,据我所知,由于使用 PGF 库进行的计算中有效数字相对较少而导致的数值错误fpu
,最低 y 刻度将显示为 0.000009999 而不是 0.00001,这不是很令人愉快。
为了解决这个问题,我提出了两种解决方案/pgfplots/log number format code
(我倾向于前者)。
使用fixedpointarithmetic
Ti钾Z 库
\documentclass[tikz, border=2mm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16}
\usepackage{fp}
\usetikzlibrary{fixedpointarithmetic}
\begin{document}
\begin{tikzpicture}
\begin{semilogyaxis}[
log number format code/.code={%
\begingroup
\pgfset{fixed point arithmetic,
number format/.cd, fixed relative, precision=4}%
\pgfmathparse{exp(#1)}%
\pgfmathprintnumber{\pgfmathresult}%
\endgroup
},
xmin=0, xmax=400,
ymin=1E-5, ymax=1E4,
ytick={1E-5,6.1E-3,1.013,221,1E4},
]
\end{semilogyaxis}
\end{tikzpicture}
\end{document}
fpu
使用Ti直接计算钾Z 库
/pgfplots/log ticks with fixed point
已经使用fpu
Ti钾Z 库,但它计算 y 刻度为 exp(nln(10)) 的相关值n. 计算链——一次乘法然后幂运算——由于计算中的有效数字较少fpu
(使用 TeX\dimen
寄存器来表示尾数),会导致错误。下面的代码具有略高的数字精度:它计算 exp(X), 在哪里X是刻度值的自然对数,作为 的参数提供/pgfplots/log number format code
。计算越少,数值误差的积累就越少。这样,结果也令人满意——它与上面的截图相同。
\documentclass[tikz, border=2mm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16}
\begin{document}
\begin{tikzpicture}
\begin{semilogyaxis}[
log number format code/.code={%
\begingroup
\pgfset{fpu, number format/.cd, fixed relative, precision=4}%
\pgfmathparse{exp(#1)}%
\pgfmathprintnumber{\pgfmathresult}%
\endgroup
},
xmin=0, xmax=400,
ymin=1E-5, ymax=1E4,
ytick={1E-5,6.1E-3,1.013,221,1E4},
]
\end{semilogyaxis}
\end{tikzpicture}
\end{document}
PS:不要忘记设置pgfplots
兼容级别(正如我在这里所做的那样\pgfplotsset{compat=1.16}
)。