如何在gnuplot中实现列值减该列首行值运算并绘图
gnuplot实现列值减首行值后绘图的方法
你可以通过两种内置方法实现列值减对应首行值后绘图的需求,不需要依赖外部工具,跨平台可用:
方法1:提前提取首行基准值(兼容性最好)
利用gnuplot内置的stats统计命令先提取目标列第一行的数值,绘图时直接做减法即可。注意gnuplot中行索引从0开始计数,文件的第一行数据对应索引0。
示例代码:
# 读取数据文件第二列第一行的值,nooutput参数表示不在终端打印统计结果 stats '你的数据文件.txt' every ::::0 using 2 nooutput # 单数据点统计时,STATS_min/STATS_max/STATS_mean均等于该点值,任选其一赋值即可 base_y = STATS_min # 绘图配置:x轴取第一列原值,y轴取第二列减去首行基准值的结果 plot '你的数据文件.txt' using 1:($2 - base_y) with lines title '偏移校正后数据'
如果需要同时处理多列,只需要对每列单独执行一次stats提取对应首行值,绘图时分别做减法即可。
方法2:单遍绘图时动态存储基准值(写法更简洁)
如果不想提前执行统计命令,可以在plot语句中利用三目运算符判断首次读行的时机,自动保存第一行的数值,后续行直接做减法,gnuplot 4.6及以上版本支持该写法:
# 初始化基准值为非数字NaN,用于判断是否是第一次读取有效数据 base_y = NaN plot '你的数据文件.txt' using 1:(base_y = isnan(base_y) ? $2 : base_y, $2 - base_y) with lines title '偏移校正后数据'
注意事项
- 如果数据文件开头有
#开头的注释行,gnuplot会自动跳过注释行计数,不需要手动调整行索引 - 如果文件开头有非数据的表头行,只需要把
every ::::0里的0改成有效数据第一行对应的索引即可,比如表头占1行、有效数据从第二行开始,就写every ::::1
内容的提问来源于stack exchange,提问作者Abolfazl Najafi
相关产品推荐
相关产品推荐

