我是gnuplot的新手,我正在尝试使用它创建一个移动音频级别的动画,如GIF:
我知道我需要使用这样的命令来写出一系列可用于制作视频的PNG文件:
set output sprintf('hrir_frame%03.0f.png',ii)
我认为我应该在每行使用带有音频电平的.dat文件,如下所示:
4
9
-3
-5
2
...
但是,我对如何使gnuplot从一个值滑动到下一个值感到困惑,就像上面的GIF一样。
答案 0 :(得分:1)
您可以使用every
说明符浏览数据:
datafile = "data.dat"
set terminal pngcairo
stats datafile
set yrange [STATS_min_y*1.2:STATS_max_y*1.2]
npoints = 100 # Always show 100 data points.
do for [ii=0:STATS_records-npoints] {
set output sprintf('hrir_frame%03.0f.png',ii)
print ii
plot datafile every ::ii::ii+npoints w lp notitle
}
这会产生一组图像文件,然后可以将它们组合成一部电影。
另一种选择可能是将gif
终端与动画一起使用:
datafile = "data.dat"
set terminal gif size 300,200 animate delay 2
set output "moving.gif"
stats datafile
set yrange [STATS_min_y*1.2:STATS_max_y*1.2]
npoints = 100
do for [i=0:STATS_records-npoints] {
print i
plot datafile every ::i::i+npoints w lp notitle
}
两个脚本中的重要部分是
plot datafile every ::i::i+npoints
请输入help every
了解详细信息,条目i
和i+npoints
对应第一个数据点和数据点数。
为了在每个图上都有一致的缩放,y范围用set yrange
调整。限制来自stats
命令,但可以手动设置。
gif结果看起来像这样(它非常大,可能无法满足你的速度要求,也许这可以优化):
使用
创建样本数据datafile = "data.dat"
set print datafile
do for [i=0:500] {
print sin(2.0*pi*1.0*(i/100.0)) \
+ sin(2.0*pi*2.0*((i+25)/100.0)) \
+ sin(2.0*pi*3.0*((i+15)/100.0))
}