使用gnuplot创建移动音频级别的动画
我是gnuplot的新手,正在尝试使用它创建移动音频级别的动画,如下面的GIF: 我知道我需要使用如下命令写出一系列可用于创建视频的PNG文件:使用gnuplot创建移动音频级别的动画,gnuplot,Gnuplot,我是gnuplot的新手,正在尝试使用它创建移动音频级别的动画,如下面的GIF: 我知道我需要使用如下命令写出一系列可用于创建视频的PNG文件: set output sprintf('hrir_frame%03.0f.png',ii) 我假设我应该使用一个.dat文件,每行上的音频级别如下: 4 9 -3 -5 2 ... 但是,我不知道如何使gnuplot从一个值滑动到另一个值,如上面的GIF所示。您可以使用每个说明符在数据中移动: datafile = "data.dat" set
set output sprintf('hrir_frame%03.0f.png',ii)
我假设我应该使用一个.dat文件,每行上的音频级别如下:
4
9
-3
-5
2
...
但是,我不知道如何使gnuplot从一个值滑动到另一个值,如上面的GIF所示。您可以使用
每个
说明符在数据中移动:
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))
}
你好我认为你需要提供更多的信息。您是否有一些输入文件作为示例放在这里?有很多方法可以实现这一点,但其中一种方法是在png文件上创建一个系列,然后根据您的操作系统使用
convert
或类似的方法组合它们。另外,试着在谷歌上多搜索一点,因为这是在@ViniciusPlacco之前回答过的,所以这个例子是不同的,因为它从0-1过渡到2-3。对于每一帧,我想滑出一个值并添加另一个值。因此,在本例中,第一帧显示0-1,下一帧显示1-2。但我不知道如何构造dat文件或gnuplot代码来实现这一点。有什么建议吗?谢谢,这看起来是正确的。不幸的是,尽管我收到了这样的消息:“test”,第5行:未定义变量:STATS\u min\u y
有什么想法@maij?可能是不同的gnuplot版本?我在Debian Jessie上使用5.0STATS\u min\u y
和STATS\u max\u y
用于在每个绘图上具有相同的范围,您可以手动设置它们。它们应该是stats
的输出。您可以在stats
命令之后键入show variables
来检查它们是否存在。这同样适用于STATS\u记录
:如果它不存在,请手动设置它。@maji,看起来它们为我命名为STATS\u min
和STATS\u max
。换成那两个就行了。谢谢你的帮助!