我对 gnuplot 完全陌生,只学习了开始绘图的基础知识。我正在编写一个执行 DSP 并需要实时绘制结果的 C 程序。此外,我以以下方式设置了我的程序,以结合 gnuplot 中的 plot '-' 功能。父进程会不断地进行DSP计算,并通过管道将结果实时发送给子进程。孩子将收到来自父母的信号,唤醒,并通过管道将结果发送到 gnuplot。
基本上,数据的路径是这样的:
父(计算)-> 管道-> 子(等待父输入)-> 管道-> gnuplot(绘图)
例如,在 child 中,包含在有条件的等待中
getline(&lineBuffer, lineSize, stdin);
printf("%s", lineBuffer);
fflush(stdout);
wherelineBuffer
可以是任意char*
的,会将数据从父级重定向到 gnuplot。我拥有绘图所需的所有数据,并且可以将其格式化为任何格式。但是,在尝试了以下之后,并没有成功。
如果尚未定义外观和标签,
set terminal x11 persist noraise
set xlabel "Frequency"
set ylabel "Decibel"
set xrange [0:2000]
set yrange [-100:100]
set style data lines
启动初始绘图命令,
plot '-' using 1:2 smooth unique
开始发送数据,每个点都是一个新行,我将数据格式化为
Frequency Decibel
在特定时间,例如
1000 -30.00
1001 -31.00
....
通过发送结束数据
e\n
然后我重新启动发送数据的过程,并以
replot
这看起来对吗?另一方面,我也有兴趣绘制特定频率的时间序列,经过多次搜索,显然我需要一个缓冲区或一个临时文件来完成这个,这也正确吗?