【问题标题】:Gnuplot Animate multiple figures from data fileGnuplot 对数据文件中的多个图形进行动画处理
【发布时间】:2017-05-04 03:59:27
【问题描述】:

我有一个数据文件,其中包含 t 个时间步长的 n 个坐标位置,c 个我想创建动画的数字使用 gnuplot 在 gif 文件中。

数据文件设置为在每个时间步给出所有 c 个图形的 n 个坐标位置,如

x1,1 y1,1
x1,2 y1,2
.
.
.
x1,n y1,n
x2,1 y2,1
.
.
.
xc,n yc,n

在每个时间步,我想在我的 gif 动画中绘制我的 c 人物的所有 n 个位置。

以下代码无法正常工作。

set terminal gif animate
set output "output.gif"

do for [i=1:time_final] {
do for [j=1:c] {
plot "file.dat" every 1::(i-1)*(j-1)*n::i*j*n-1 u 1:2 w filledcurves
}}
set output

对于这个问题的新手,我深表歉意。

【问题讨论】:

  • 请阅读 StackOverflow 上的 How to Ask。更具体地说,向我们展示您尝试了什么,以及为什么它不起作用。
  • 谢谢你,我根据你的建议更新了我的帖子。

标签: animation gnuplot


【解决方案1】:

我认为every 语句需要稍作调整。您的每个“时间步长”总共包含 c*n 记录。在 every 关键字上下文中的 Gnuplot 中的点编号是从 0 开始的。这意味着时间步长i(假设第一个具有i=1,如在您的do 循环中)从点(i-1)*c*n 开始。为了移动到“数字”j(再次假设每个时间步内的第一个具有j=1),我们需要添加一个偏移量(j-1)*n。现在,由于每个“图形”都有n 点,因此每个图形中最后一个点的偏移量是n-1。总计:

do for [i=1:time_final] {
    stepOffset = (i-1)*c*n
    do for [j=1:c] {
        firstPoint = stepOffset + (j-1)*n
        lastPoint = firstPoint + (n-1)
        plot "file.dat" every ::firstPoint::lastPoint u 1:2 w filledcurves
}}

如果您想将c“数字”合并到一个图中,您可以这样做:

do for [i=1:2] {
    stepOffset = (i-1)*c*n
    plot for [j=1:c] "file.dat" every ::(stepOffset + (j-1)*n)::(stepOffset + (j-1)*n + (n-1)) u 1:2 w filledcurves
}

顺便说一句,由于您的数据文件只有两列,w filledcurves 样式在这里似乎放错了位置,如果您想填充曲线之间的区域,例如 x 轴,w filledcurves x1 应该可以工作。 ..

【讨论】:

  • 效果很好,非常感谢!只是可能在你的第二段代码中编辑“为 [i=i:2] 做”到“为 [i=1:time_final] 做”关于你对“填充曲线”的评论,事实上我正在绘制的是封闭图形的坐标位置,因此在我的图形中“填充曲线”颜色。
猜你喜欢
  • 1970-01-01
  • 2020-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-03
  • 1970-01-01
相关资源
最近更新 更多