Gnuplot:处理异常结果

时间:2013-10-20 13:33:31

标签: gnuplot

我在Windows 8机器上使用gnuplot版本4.6,补丁级别3,终端设置为wxt。

文件results.csv有一个随球体半径变化的能量列表。我正在使用Gnuplot生成图表以显示趋势。

不幸的是,由于用于计算这些能量的程序中只能被描述为“数值不稳定性”,results.csv包含异常结果。因此将results.csv绘制为:

set datafile separator “,”
set title “Oxygen3 Point Vacancy Defect Energy Variation with \n Radius of Region I in Mott-Littleton Defect Model”
set xlabel ‘Radius of Region I (Å)’
set ylabel ‘Defect Energy (eV)’
set grid
unset key
set border 3
set xtics border nomirror outwards
set ytics border nomirror outwards
set format y '%.2f'
plot ‘results.csv’ using 2:4 smooth unique with linespoints lw 3 lc rgb ‘black’

给出以下图表:enter image description here

[ N.B。我减少了此示例中的数据线数量]

由于我想要整体趋势,我想跳过半径= 16的点。但是,将我的绘图命令更改为:

plot 'results.csv' using 2: ($4 > 20 ? $4 : 1/0) smooth unique with linespoints lw 3 lc rgb 'black'

导致: enter image description here

有没有人得到任何关于什么使gnuplot连接x = 9指向x = 17以及如何克服这个问题的建议。

另外,当我尝试拟合“最佳拟合”时,如何跳过异常数据点?

非常感谢任何帮助

1 个答案:

答案 0 :(得分:1)

在绘制

时忽略异常点

原则上,gnuplot知道

  1. missing点,可以使用set datafile missing进行设置。在绘图期间会跳过这些点,并且不会影响线图。
  2. undefined点,例如1/0。这些点也被跳过,但线图在这里被中断。
  3. 不幸的是,当涉及到计算(例如您的情况下的过滤)时,无法使用缺少的数据点,请参阅例如In gnuplot, with “set datafile missing”, how to ignore both “nan” and “-nan”?

    因此,最好的方法是使用外部工具过滤数据:

    plot '< awk ''{ if ($4 > 20) print }'' results.csv' using 2:4 smooth unique
    

    但这要求平均完成的每个点都符合这个标准。

    在拟合时忽略异常点

    关于在拟合期间忽略异常点,我最近回答了Ignore points far away from mean gnuplot

    我认为你可以在没有平滑的情况下进行拟合,可能比首先平滑然后拟合更好。与平滑数据拟合将忽略单个数据点的分布,以及单个数据点的更好/更差的保真度。

    如果您仍想使用平滑数据,则必须先将它们写入临时文件,因为smooth unique不能与fit一起使用:

    set output '| head -n -2 > results.tmp'
    set table
    plot '< awk ''{ if ($4 > 20) print }'' results.csv' using 2:4 smooth unique
    unset table
    

    关于set output部分,请参阅Why does the 'set table' option in Gnuplot re-write the first entry in the last line?