You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GNUplot管道传输原始数据时多曲线绘图不同步问题求解

问题解决方案

问题根因

你遇到的同步问题本质是两个错误导致的:

  • plot指令同时调用了两个inline数据源("-"和""),但你每次只输出了1个结束符e,gnuplot始终在等待第二个数据源的结束标记,只能用上次缓存的数据补全第二条曲线,导致两次采样的数据拼到了同一帧里
  • C程序默认的标准输出缓冲机制会把输出拆分成多段传给管道,gnuplot收到不完整的指令/数据就提前触发渲染

最优修复方案

按照下面的步骤修改即可,修改后刷新速率可轻松达到10Hz以上,远满足1Hz的要求:

步骤1:禁用C程序标准输出缓冲

在C程序main函数最开头加入一行代码,完全禁用stdout的缓冲,确保所有输出会直接写入管道:

setvbuf(stdout, NULL, _IONBF, 0);

步骤2:调整输出结构,补充结束符

  • 所有set开头的配置指令只需要在程序启动时输出一次,不需要每次刷新重复输出,减少不必要的传输开销
  • 每次刷新时输出完plot指令和采样数据后,连续输出2个e结束符,分别对应两个inline数据源的结束标记

正确输出示例

程序启动后仅输出一次全局配置:

set terminal wxt noraise background rgb 'sea-green'
set autoscale
set title "Collected Data"
set yrange[-0.5:4.0]
set xrange[0:128]

后续每次拿到新采样数据,输出单帧内容如下:

plot "-" u (1.000000*$1):2 with lines lw 3 lc rgb 'dark-red', ""  u (1.000000*$1):3 with lines lw 3 lc rgb 'dark-blue'
 0.750  3.204  3.211
 1.750  0.150  0.139
 2.750  0.127  0.118
 3.750  0.109  0.098
 4.750  0.091  0.085
 5.750  0.081  0.074
e
e

执行命令不需要修改,依然为:

./cprog | gnuplot

内容的提问来源于stack exchange,提问作者baetis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 13:06:03