【问题标题】:gnuplot animation 2D vector fieldsgnuplot 动画 2D 矢量场
【发布时间】:2019-11-18 10:41:12
【问题描述】:

我正在尝试使用 gnuplot 制作 2D 矢量动画。我想显示一行,即一次显示一个向量。

我的数据结构如下:x,y,u,v

2.24448 0.270645    1.00    1.00
3.24448 0.270645    0.500   1.20

我可以通过以下命令创建静态绘图:

plot "datam.dat" using 1:2:3:4 with vectors filled head lw 3

这是输出:

这是我的问题:我想制作动画并一次显示一行(即)一个矢量,如何在 GNU 绘图中使用 GIF 完成此操作?

谢谢

【问题讨论】:

    标签: animation vector gnuplot gif animated-gif


    【解决方案1】:

    动画 GIF 是使用 set terminal gif animate 创建的。详情请查看help gif。 下面是一个简单的例子(用 gnuplot 5.2 测试)。您必须为每一帧制作一个新图。因此,将您的绘图命令放入do for-loop。使用every ::i::i,您只绘制ith 行(检查help every)。如果您不知道数据文件的总行数,请执行stats "YourFile.dat",变量STATS_records 会告诉您这个数字。

    代码:

    ### animated graph with vectors
    reset session
    
    set term gif size 300,300 animate delay 12 loop 0 optimize
    set output "AnimateVectors.gif"
    
    # create some dummy data
    set angle degrees
    N = 60
    set samples N
    set table $Data
        plot [0:360] '+' u (cos($1)):(sin($1)):(sin($1)):(cos($1)) w table
    unset table
    
    set xrange[-2.5:2.5]
    set yrange[-2.5:2.5]
    do for [i=0:N-1] {
        plot $Data u 1:2:3:4 every ::i::i w vectors lw 2 lc rgb "red" notitle
    }
    set output
    ### end of code
    

    结果:

    加法:

    这将是非动画版本,例如在wxt-终端中。

    代码:

    ### non-animated graph with vectors
    reset session
    set term wxt size 400,400
    
    # create some dummy data
    set angle degrees
    N = 60
    set samples N
    set table $Data
        plot [0:360] '+' u (cos($1)):(sin($1)):(sin($1)):(cos($1)) w table
    unset table
    
    set xrange[-2.5:2.5]
    set yrange[-2.5:2.5]
    plot $Data u 1:2:3:4 w vectors lw 1.5 lc rgb "red" notitle
    ### end of code
    

    结果:

    加法2:

    你的意思可能是这样的吗? “半”动画箭头?顺便说一句,你可以看到gifwxt 终端中的箭头看起来完全不同。

    代码:

    ### "semi"-animated graph with vectors
    reset session
    set term gif size 300,300 animate delay 12 loop 0 optimize
    set output "AnimateVectorsSemi.gif"
    
    # create some dummy data
    set angle degrees
    N = 60
    set samples N
    set table $Data
        plot [0:360] '+' u (cos($1)):(sin($1)):(sin($1)):(cos($1)) w table
    unset table
    
    set xrange[-2.5:2.5]
    set yrange[-2.5:2.5]
    
    do for [i=0:N-1] {
        plot $Data u 1:2:3:4 every ::0::i w vectors lw 1.5 lc rgb "red" notitle
    }
    set output
    ### end of code
    

    结果:

    【讨论】:

    • 非常感谢@theozh。我有一个问题,如果我想让矢量出现并留下来怎么办?
    • 那么,应该动画什么?
    猜你喜欢
    • 2019-04-13
    • 2022-11-21
    • 1970-01-01
    • 2016-04-25
    • 1970-01-01
    • 2014-02-17
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    相关资源
    最近更新 更多