如何在gnuplot中跳过缺失数据并按列正确绘图?
解决Gnuplot读取空列数据错位的问题
你的问题出在Gnuplot默认按任意空白字符分隔列,当某列为空时,后面的列会自动补位,导致第三列取到了原本第四列的值。以下是几种解决方法:
方法1:设置缺失值识别
告诉Gnuplot将空字符串视为缺失值,避免列错位:
set datafile missing "" plot "file" u 1:3
这样Gnuplot会把空的第三列识别为缺失值,不会用第四列的数据填充,绘图时会跳过这些缺失的点。
方法2:按固定列宽读取数据
如果你的数据是固定宽度排版(比如每列占固定字符数),直接按字符位置提取对应列更可靠。假设你的数据每列占3个字符(第一列从第1位开始,第三列从第7位开始),用substr提取子字符串并转换为数值:
plot "file" u (int(substr($0, 1, 3))):(int(substr($0, 7, 3)))
根据你实际的列宽调整substr的起始位置和长度即可。
方法3:预处理数据补全缺失值
用awk工具把空列替换为NaN(Gnuplot默认识别的缺失值),确保每行列数一致:
awk '{for(i=1;i<=4;i++) if($i=="") $i="NaN"; print}' file > processed_file
然后在Gnuplot中读取处理后的文件:
plot "processed_file" u 1:3
内容的提问来源于stack exchange,提问作者rfeynman
相关产品推荐
相关产品推荐

