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

Gnuplot技术问题:如何跳过第一列值为0的数据行?

过滤Gnuplot临时表中第一列为0的行及最终筛选最小差值行

方法一:生成临时表时直接过滤无效行

不需要先输出0/1标记行,直接在生成临时表阶段只保留满足条件的记录:

$Data <<EOD
# block_1   # block_2
x y         x y
1 1979.2    2 2027
1 1598.6    2 1591.4
1 1430.8    2 1401.6
1 1544.7    2 1923.7
1 1953.3    2 1677
1 1288.8    2 1311.1
1 1741.3    2 1689.3
1 1791.1    2 2015.8
EOD

pt = 1953.1
limit = 0.5

# 只保留block_1的y与pt差值小于limit的行,同时记录差值和block_2的y
set table $Candidates
    plot $Data u (abs($2 - pt)):($4) w table if (abs($2 - pt) < limit)
unset table

print $Candidates

这段代码会直接输出所有符合差值要求的行,不会包含标记为0的无效记录。

方法二:过滤已生成的$Temp表中第一列为0的行

如果已经得到了包含0/1标记的$Temp表,可通过二次筛选保留第一列为1的行:

# 生成原始$Temp的代码不变
set table $Temp
    plot $Data u ( absDiff( 2, pt ) ):( $4 ) w table
unset table

# 过滤第一列为1的行
set table $Filtered
    plot $Temp u ($1 == 1 ? $2 : NaN) w table
unset table

print $Filtered

进阶:筛选差值最小的行

如果存在多行满足条件,要选出差值最小的行,可结合stats命令实现:

$Data <<EOD
# block_1   # block_2
x y         x y
1 1979.2    2 2027
1 1598.6    2 1591.4
1 1430.8    2 1401.6
1 1544.7    2 1923.7
1 1953.3    2 1677
1 1288.8    2 1311.1
1 1741.3    2 1689.3
1 1791.1    2 2015.8
EOD

pt = 1953.1
limit = 0.5

# 生成候选行
set table $Candidates
    plot $Data u (abs($2 - pt)):($4) w table if (abs($2 - pt) < limit)
unset table

# 计算最小差值
stats $Candidates u 1 nooutput
min_diff = STATS_min

# 提取差值最小的行
set table $Result
    plot $Candidates u ($1 == min_diff ? $2 : NaN) w table
unset table

print "差值最小的行:"
print $Result

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 22:45:41