我遇到了以下问题:使用 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}