Gnuplot字符串字段条件绘图问题:仅绘制name为Q4的x、y数据
在gnuplot中按字符串条件筛选数据绘制
你的代码出错有几个核心原因:
- 用了字符串字面量
"name"和"y"而非引用数据列,gnuplot会把这些字符串当成数值解析,触发报错; - 错误使用
==作为字符串比较符,gnuplot中字符串相等判断需用eq; - 命令末尾多了一个冗余括号。
正确实现方法
先明确数据列对应关系:你的数据文件第1列是name字符串列,第2列是x、第3列是y。如果数据文件第一行是表头,需要用skip 1跳过表头行。
简洁写法
plot "data.log" skip 1 u ($1 eq "Q4" ? $2 : NaN) : ($1 eq "Q4" ? $3 : NaN) with points
$1指代第1列字符串,eq用于判断字符串相等;- 条件满足时取对应数值列(
$2为x轴数据,$3为y轴数据),否则返回NaN,gnuplot会自动跳过这些无效数据行; with points指定绘制点样式,可根据需求替换为lines等其他样式。
直观显式写法
如果觉得$n不够清晰,可用strcol()和column()函数明确指定列类型:
plot "data.log" skip 1 u (strcol(1) eq "Q4" ? column(2) : NaN) : (strcol(1) eq "Q4" ? column(3) : NaN) with points
strcol(1)获取第1列的字符串值;column(2)获取第2列的数值。
补充说明
如果数据文件没有表头行,直接去掉skip 1即可:
plot "data.log" u ($1 eq "Q4" ? $2 : NaN) : ($1 eq "Q4" ? $3 : NaN) with points
内容的提问来源于stack exchange,提问作者Lev Smolentsev
相关产品推荐
相关产品推荐

