gnuplot:无声错误读取(非标准形式)科学格式数字

时间:2016-01-22 09:50:29

标签: gnuplot precision scatter-plot linechart scientific-notation

编辑:由于我发现了问题,我已经纠正了这个问题。

我有一个为GNUPlot生成数据的程序。一切正常,除了一件事:数据程序生成的是双浮点格式,此数据的可打印表示形式是,例如1.2d06.3d-5(Common Lisp的标准表示)。

然而,GNUPlot期望1.26.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。情节有一个意外的峰值(见下文)。

sin(x) with spike

我的解决方案:将数据转换为单浮点数或更改双浮点数的可打印表示。

1 个答案:

答案 0 :(得分:3)

Fortran也使用这种格式。 Gnuplot提供了一个选项,可以检查数据文件中的DQ常量:

set datafile fortran

plot '-' using 1:2 w lp
2.9670597283903604d0 0.17364817766693028d0
3.141592653589793d0 1.2246467991473532d-16
3.3161255787892263d0 -0.17364817766693047d0
e

根据文档,默认情况下未启用选项,因为它会降低输入过程的速度。