gnuplot:静默错误读取(非标准形式的)科学格式数字
编辑:自从我发现问题以来,我已经更正了问题 我有一个程序,可以为GNUPlot生成数据进行绘图。一切正常,除了一件事:程序生成的数据是双浮点格式,该数据的可打印表示形式是,例如gnuplot:静默错误读取(非标准形式的)科学格式数字,gnuplot,precision,scatter-plot,linechart,scientific-notation,Gnuplot,Precision,Scatter Plot,Linechart,Scientific Notation,编辑:自从我发现问题以来,我已经更正了问题 我有一个程序,可以为GNUPlot生成数据进行绘图。一切正常,除了一件事:程序生成的数据是双浮点格式,该数据的可打印表示形式是,例如1.2d0或6.3d-5(通用Lisp的标准表示形式) 然而,GNUPlot希望数字的格式为1.2或6.3e-5。也许,GNUPlot在读取数据时可能会发出警告,但由于所有数据都是通过管道传输的,因此它不会显示。所以,发生了什么:GNUPlot愉快地读取数字,直到遇到dXXX后缀,然后默默地丢弃它。这导致了一些意想不到的事
1.2d0
或6.3d-5
(通用Lisp的标准表示形式)
然而,GNUPlot希望数字的格式为1.2
或6.3e-5
。也许,GNUPlot在读取数据时可能会发出警告,但由于所有数据都是通过管道传输的,因此它不会显示。所以,发生了什么:GNUPlot愉快地读取数字,直到遇到dXXX
后缀,然后默默地丢弃它。这导致了一些意想不到的事情。例如,要从程序中绘制y=sin(x)
,靠近x=pi的数据行如下所示
2.9670597283903604d0 0.17364817766693028d0
3.141592653589793d0 1.2246467991473532d-16
3.3161255787892263d0 -0.17364817766693047d0
因此,对于x=3.14159…
GNUPlot读取y=1.2246…
,而不是y=1.2246…e-16
。图中有一个意外的尖峰(见下文)
我的解决方案是:将数据转换为单浮点数或更改双浮点数的可打印表示。Fortran也使用这种格式。Gnuplot提供了一个选项来启用数据文件中D
和Q
常量的检查:
set datafile fortran
plot '-' using 1:2 w lp
2.9670597283903604d0 0.17364817766693028d0
3.141592653589793d0 1.2246467991473532d-16
3.3161255787892263d0 -0.17364817766693047d0
e
根据文档,该选项在默认情况下未启用,因为它会减慢输入过程。我从未见过这样的错误,请显示您正在使用的文件中的脚本和原始数据行。我想我找到了错误所在的位置。该点的数据行如下所示3.141592653589793d0 1.2246467991473532d-16
——因此,双浮点数的格式为结尾处的dXXX
。我觉得GNUPlot无法读取此表单中的数字,需要eXXX
。因此,如果最后一个数字是写的1.2246…e-16
,就不会有问题了。@Christoph错误确实如上所述。我已更正问题以反映这一点。