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
相关产品推荐
相关产品推荐

