Gnuplot技巧:跳过表头并按配置值绘制多条彩色曲线
Gnuplot 多配置曲线绘制问题
数据文件结构
Header 1 Header 2 config X Y 0.0 -5 -2 0.0 0 1 0.0 5 4 Header2 Config X Y 1.0 -5 -1 1.0 0 0 1.0 5 5 Header2 Config X Y 2.0 -5 0 2.0 0 1 2.0 5 6
需求
- 移除所有表头及非纯数字行
- 按第1列的配置值分组,每个配置值对应一条独立曲线(带标签和不同颜色),绘制第3列(Y)随第2列(X)的变化
尝试过的命令
p 'filename.txt' every ::3 u 2:3 w p
未能实现分组绘制的需求
解决方案:单行Gnuplot命令
可以结合awk预处理数据,同时完成过滤非数字行和按配置值分隔数据块的操作,再由Gnuplot绘制:
plot '< awk ''/^[0-9.-]/ {if ($1 != prev) {print ""; prev=$1} print $0}'' filename.txt' index 1:* using 2:3 with linespoints title sprintf("config %.1f", $1)
命令解释
- Awk预处理部分:
/^[0-9.-]/:仅保留以数字、小数点或负号开头的纯数据行,自动过滤所有表头行if ($1 != prev) {print ""; prev=$1}:每当第1列的配置值变化时,插入一个空行,Gnuplot会将空行分隔的内容视为独立数据集(通过index识别)
- Gnuplot绘制部分:
index 1:*:从第1个数据集开始读取所有分隔后的配置块(跳过awk插入的第一个空行对应的空数据集)using 2:3:指定用第2列(X)和第3列(Y)绘制曲线with linespoints:同时显示线条和数据点,便于观察数据趋势title sprintf("config %.1f", $1):用当前数据集的第1列值作为曲线标签,格式化显示配置值
手动指定行号的简化版(仅适用于固定结构的数据)
如果数据文件中每个配置的行范围固定,也可以直接用every关键字指定行范围,但灵活性较差:
plot 'filename.txt' every ::3::5 u 2:3 w lp title "config 0.0", '' every ::9::11 u 2:3 w lp title "config 1.0", '' every ::15::17 u 2:3 w lp title "config 2.0"
内容的提问来源于stack exchange,提问作者Bean_from_accounts
相关产品推荐
相关产品推荐

