pgfplots-精度不足

pgfplots-精度不足

我遇到了以下问题:使用 pgfplots 绘制一些收敛图时,我必须加载一个文本文件并进行一些计算。大多数时候一切都运行正常。但在某些情况下,pgfplots 的 4-6 位有效数字是不够的。

我该如何修改以下代码以获得我想要的图表?我读过关于使用 gnuplot 的文章,但我找不到适合我特定用例的类似示例。而且 pgfplots 手册在第 4.2.6 或 4.2.7 节中确实提到了在 gnuplot 或 shell 中加载表格和进行计算。还有其他方法可以实现这一点吗?我确实有很多图表需要生成,因此最好使用像下面的 pgfplots 代码这样的半自动解决方案。

\begin{tikzpicture}
    \begin{semilogyaxis}
        \addplot table[x expr={\thisrowno{0}^0.2}, y expr={sqrt(abs(0.80336293803-\thisrowno{}))}] {data/convRates.txt};
    \end{semilogyaxis}
\end{tikzpicture}

convRates.txt

1       0.6123724356960
155     0.8002396840450
1115        0.8032455664310
4519        0.8033592830220
13391       0.8033626913420
32579       0.8033629179460
69187       0.8033629362110
133007      0.8033629378560
236951      0.8033629380130
397483      0.8033629380290

谢谢你的帮助。

答案1

您无需使用它pgfplots来评估表达式,而是可以使用l3fp可以保证完整 16 位浮点精度的表达式。

此外,始终使用句点作为小数分隔符。

\documentclass{article}
\usepackage{pgfplots,xparse}
\ExplSyntaxOn
\DeclareExpandableDocumentCommand \eval { m } { \fp_eval:n { #1 } }
\ExplSyntaxOff
\begin{document}
\begin{tikzpicture}
  \begin{semilogyaxis}
    \addplot table [
    x expr={\eval{(\thisrowno{0})^0.2}},
    y expr={\eval{sqrt(abs(0.80336293803-\thisrowno{1}))}}
    ] {
      1      0.6123724356960
      155    0.8002396840450
      1115   0.8032455664310
      4519   0.8033592830220
      13391  0.8033626913420
      32579  0.8033629179460
      69187  0.8033629362110
      133007 0.8033629378560
      236951 0.8033629380130
      397483 0.8033629380290
    };
  \end{semilogyaxis}
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容