我在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’
给出以下图表:
[ N.B。我减少了此示例中的数据线数量]
由于我想要整体趋势,我想跳过半径= 16的点。但是,将我的绘图命令更改为:
plot 'results.csv' using 2: ($4 > 20 ? $4 : 1/0) smooth unique with linespoints lw 3 lc rgb 'black'
导致:
有没有人得到任何关于什么使gnuplot连接x = 9指向x = 17以及如何克服这个问题的建议。
另外,当我尝试拟合“最佳拟合”时,如何跳过异常数据点?
非常感谢任何帮助
答案 0 :(得分:1)
原则上,gnuplot
知道
missing
点,可以使用set datafile missing
进行设置。在绘图期间会跳过这些点,并且不会影响线图。undefined
点,例如1/0
。这些点也被跳过,但线图在这里被中断。不幸的是,当涉及到计算(例如您的情况下的过滤)时,无法使用缺少的数据点,请参阅例如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?。