我有一张图表,它必须显示数值方案的能量振荡。问题是能量是这样的:
-9.99999994950000e-01
8 位数字后出现振荡。目前,图表是一条直线,因此我看不到振荡。
pgfplots 可以使用多少位数字?有什么方法可以查看这些振荡吗?
答案1
这里的问题是你想要显示数据范围比如说, -9.99999994950000e-01 到 -9.99999995000000e-01 。pgfplots
抱歉,此处提供有意义结果所需的相对精度超出了 的能力。
但是,如果你手头有数学工具,你可以协助它。“数学工具”可以是 LuaLaTeX...假设你有LuaLaTeX,那么以下可能是一个解决方案:
\documentclass{standalone}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\def\SHIFT{-0.99999999}
\def\EXPONENT{9}%
\begin{axis}[
y coord trafo/.code={%
\edef\pgfmathresult{\directlua{tex.print( (#1 - (\SHIFT))*10^(\EXPONENT) )}}%
\message{#1 -> \pgfmathresult^^J}%
},
y coord inv trafo/.code={%
\edef\pgfmathresult{\directlua{tex.print( #1*10^(-\EXPONENT) + (\SHIFT) )}}%
\message{inv: #1 -> \pgfmathresult^^J}%
},
yticklabel style={
/pgf/number format/precision=11,
/pgf/number format/fixed zerofill,
},
]
\addplot table {
0 -9.99999994950000e-01
1 -9.99999995000000e-01
2 -9.99999995010000e-01
};
\end{axis}
\end{tikzpicture}
\end{document}
它利用 Lua 的数学功能将输入数据转换为pgfplots
可以应用其算法的范围。之后,它再次使用 Lua 将中间结果转换回来。数字打印机是无损的(因为它只对符号进行操作)。
请注意,这种由移位和指数组成的仿射变换与 pgfplots 内部执行的操作非常相似。它只是无法应对如此高的相对精度。
如果您没有 LuaLaTeX,您仍然可以尝试准备数据。显然,能量是通过某种数字算法计算的。如果您手动应用这种转换,则可以显示它。您需要获得有意义的刻度标签,这不如我的第一种方法优雅,但仍然可行(例如通过手动提供它们)。