GNUPlot - 将2D数据点绘制为MPEG

时间:2014-08-26 18:32:51

标签: gnuplot

我在x-y列中有一堆点,我使用了一些fortran代码。部分看起来像这样

   1.000          0.000
   0.996          0.063
   0.988          0.125
   0.976          0.187
   0.961          0.249
   0.941          0.309
   0.917          0.368
   0.890          0.426
   0.859          0.481
   0.825          0.535
   0.787          0.587
   0.746          0.636
   0.702          0.682

到目前为止,我可以将它全部绘制在一张图片中。

但我需要做的是将这些点一次一个地绘制成电影。我宁愿不做GIF,因为我需要时间滑块。当它移动时,我需要有线连接点。

然而,我发现涉及MPEG的所有教程都是一次绘制一个DAT文件,并将JPEG制作成电影。像这个,Make movie with data files using gnuplot,但我没有足够的资源。

或者,我试图遵循这个:Gnuplot - plotting position(xyz) vs time data inside a specified space (eg a box) with a pause然后将其转换为MPEG,但我无法让他们的代码工作。我得到了所有帧中的完整情节,只有n =#部分是动画。

但我能够得到一个“情节f(x,t)”动画。

(编辑:我没有动画点的代码。真的)

1 个答案:

答案 0 :(得分:2)

要一次动画一个点,您可以按照以下方式进行:

# calculate the number of points
stats 'file.txt' using 1:2 nooutput

# if you want to have a fixed range for all plots
set xrange [STATS_min_x:STATS_max_x]
set yrange [STATS_min_y:STATS_max_y]

set terminal pngcairo size 800,400
outtmpl = 'output%07d.png'

do for [i=0:STATS_records-1] {
    set output sprintf(outtmpl, i)
    plot 'file.txt' every ::::i with lines title sprintf('n = %d', i)
}
set output

最后使用类似

的内容
ffmpeg -i pic%07d.png movie.mpeg

转换为电影。

注意,对于plot,您必须使用every ::::i(仅限:}来限制绘制点的数量。您关联的问题Gnuplot - plotting position(xyz) vs time data inside a specified space (eg a box) with a pause必须使用五个:来迭代数据,就像用于带splot的3D图一样。