如何在gnuplot中读取日志文件数据并绘制Var1与Var2的实时对比图
解决方法
你的问题核心是当前脚本把Var1和Var2当成两个独立的数据集,gnuplot只能分别用行号作为X轴绘制它们,没法建立Var1和Var2的对应关系。要让Var2作为X轴、Var1作为Y轴,你需要先把两个变量的对应值合并成一行一行的X-Y配对数据,再让gnuplot读取这组配对数据。
修改后的完整脚本
set title "Var1 vs Var2" set xlabel "Var2 (Time)" set ylabel "Var1 (Mean Value)" set xtics rotate # 可选:如果X轴标签太长,旋转避免重叠 # 合并Var2和Var1为两列数据:第一列是Time(Var2),第二列是Mean值(Var1) data = "< paste <(grep -w 'Time =' ./output.txt | cut -d'=' -f 2 | xargs) <(grep -w 'Mean and max values' ./output.txt | cut -d' ' -f 9 | xargs)" # 绘制X轴用第一列(Var2),Y轴用第二列(Var1) plot data using 1:2 with lines title "Var1 over Var2" pause 2 reread
关键修改说明
- 合并配对数据:
用paste命令结合shell进程替换<(),把提取Var2和Var1的两个命令输出按行合并,生成每行包含Var2 Var1的两列数据。xargs是为了去除每行前后的多余空格,避免gnuplot解析数据出错。
- 指定X-Y轴映射:
plot ... using 1:2明确告诉gnuplot:用数据的第1列作为X轴值,第2列作为Y轴值,这样就建立了Var1和Var2的对应关系。 - 自动X轴刻度:
现在gnuplot会自动用Var2的实际值作为X轴刻度,不需要手动set xtics (Var2)——原来的写法无效是因为Var2是命令输出,不是gnuplot能识别的刻度列表格式。
额外注意事项
- 确保
grep -w 'Time ='和grep -w 'Mean and max values'输出的行数完全一致,否则paste会把不对应的行配对,导致图表错误。 - 如果日志更新频率很高,可以调整
pause 2的数值(单位是秒),控制gnuplot刷新图表的间隔。
内容的提问来源于stack exchange,提问作者ishan_ae
相关产品推荐
相关产品推荐

