You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Gnuplot中使用table与convexhull时如何仅导出非NaN行?

解决gnuplot中set table $HULL生成大量NaN行的问题

问题背景

使用gnuplot的set table $HULL结合plot ... convexhull处理datos.txt数据时,生成的$HULL变量中包含大量NaN行。需要在保留x、y列原始显式格式的前提下,仅保留非NaN行,且必须使用set table实现(无法通过无table方式满足格式要求)。

解决方案

通过两步处理:先生成包含凸包数据的原始$HULL变量,再过滤其中的NaN行到新变量中,全程保留列格式。

示例代码

# 第一步:生成包含完整凸包数据(含NaN行)的$HULL变量
set table $HULL
plot 'datos.txt' using 1:2 convexhull
unset table

# 第二步:过滤非NaN行到$HULL_CLEAN,保留原始列格式
set table $HULL_CLEAN
# 仅当x、y均为非NaN时输出,NaN行会被自动跳过
plot $HULL using ($1 == $1 ? $1 : NaN) : ($2 == $2 ? $2 : NaN) with table
unset table

# 可选:删除原始$HULL变量释放空间
unset data $HULL

关键原理

  1. NaN判断逻辑:gnuplot中NaN不等于自身,因此$1 == $1可准确判断x列是否为非NaN,同理$2 == $2判断y列。
  2. 格式保留:通过set table读取原始$HULL的数据并过滤,会完全保留原数据的列格式(如小数位数、科学计数法等),避免手动输出(如print)导致的格式失真。
  3. 过滤机制:当using语句返回NaN时,with table不会将该行写入目标变量,从而自动剔除所有包含NaN的行。

简化版(直接生成过滤后的凸包数据)

若无需保留原始含NaN的$HULL,可直接在生成时过滤:

set table $HULL
# 先计算凸包,再仅输出非NaN行
plot 'datos.txt' using ($1 == $1 ? $1 : NaN) : ($2 == $2 ? $2 : NaN) convexhull with table
unset table

注:此方法需确保原始datos.txt中无NaN行,否则会影响凸包计算结果。若原始数据含NaN,建议使用两步法。

内容的提问来源于stack exchange,提问作者ifffam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 05:33:25