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

Gnuplot字符串变量条件判断失效问题求助

问题

我有一个包含7列数据的文件,数据示例如下:

KOKEE               TIGOCONC              1.21143392716200008E-002   9999.0000000000000       1.21143404344029992E-002  1.21143392665158823E-002  1.21143392665158823E-002  
KOKEE               WESTFORD             -1.97799503925290016E-003   9999.0000000000000      -1.97799445968519991E-003 -1.97799503786376526E-003 -1.97799503786376526E-003  
SESHAN25            WETTZELL              1.39989741037330005E-002   9999.0000000000000       1.39989741037330005E-002  1.39989740975521026E-002  1.39989740975521026E-002  
WESTFORD            WETTZELL             -1.74290229035720004E-003   9999.0000000000000      -1.74290124344059997E-003 -1.74290228675636817E-003 -1.74290228675636817E-003  
KOKEE               SESHAN25             -3.83187032666899982E-003   9999.0000000000000      -3.83186908442739987E-003 -3.83187032349491209E-003 -3.83187032349491209E-003  

我希望当第1列等于"KOKEE"时,绘制计算得到的($3-$7)*299792458数值,使用的命令如下:

plot [][-0.002:0.0025] 'outall.txt' u ($1 eq "KOKEE" ?($3-$7)*299792458:1/0) title "by source" w p pt 7 ps 1

但系统报错:

internal error : STRING operator applied to undefined or non-STRING variable

         1
解决方案

错误核心原因是gnuplot默认会把所有列按数值类型解析,当用$1调用第一列时,非数值的字符串会被解析为undefined,导致字符串比较操作失败。

有两种可行的解决办法:

  • 方法1:强制指定列类型为字符串
    引用第一列时用strcol(1)代替$1,让gnuplot将该列作为字符串处理:
    plot [][-0.002:0.0025] 'outall.txt' u (strcol(1) eq "KOKEE" ? ($3-$7)*299792458 : 1/0) title "by source" w p pt 7 ps 1
    
  • 方法2:使用内置条件过滤语法
    直接在绘图命令末尾添加字符串匹配条件:
    plot [][-0.002:0.0025] 'outall.txt' u (($3-$7)*299792458) title "by source" w p pt 7 ps 1 if (strcol(1) eq "KOKEE")
    

额外注意:如果数据文件存在空行或格式不规范的行,也可能触发类似错误,需确保每行都有完整的7列内容。

内容的提问来源于stack exchange,提问作者Maria Eugenia Gomez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 15:02:10