Animation 如何在gnuplot中沿轨迹创建动画标记点?

Animation 如何在gnuplot中沿轨迹创建动画标记点?,animation,gnuplot,Animation,Gnuplot,在对现有GNU绘图进行了相当多的调整后,我成功地获得了以下内容: reset # png set terminal png size 350,262 enhanced font 'Verdana,10' # color definitions set style line 1 lc rgb '#0060ad' lt 1 lw 2 pt 7 ps 2 # --- blue unset key set border 0 unset tics # set view 342,0 set xrang

在对现有GNU绘图进行了相当多的调整后,我成功地获得了以下内容:

reset

# png
set terminal png size 350,262 enhanced font 'Verdana,10'

# color definitions
set style line 1 lc rgb '#0060ad' lt 1 lw 2 pt 7 ps 2 # --- blue

unset key
set border 0
unset tics
# set view 342,0
set xrange [-300:300]
set yrange [-300:300]

n=0
do for [ii=1:99] {
    n=n+1
    set output sprintf('png/spiral%03.0f.png',n)
    plot '1_1910.txt' every ::1::ii w l ls 1, \
   '2_1910.txt' every ::1::ii w l ls 1
}

do for [ii=1:99] {
    n=n+1
    set output sprintf('png/spiral1%03.0f.png',n)
     plot '1_1920.txt' every ::1::ii w l ls 1, \
    '2_1920.txt' every ::1::ii w l ls 1
 }
其思想是创建一组PNG文件,然后用动画将它们连接起来

我使用

  convert -delay 2 -loop 0 png/*.png animation.gif
我想做更多的调整:

  • 我不想保留整个情节的主线(即使是动画)。相反,我想要一个“要点”(可能是5-10像素的大小),对于绘图中的每个数据点,每个帧的文本都在旁边移动

  • 我希望在第一组帧(在第一个1:99循环中)的右下角有一个文本,并在右下角(在下一个1:99循环中)替换另一个文本

  • 我的代码基于以下内容:


    但我不明白为什么他的代码有一条消失的“线索”,为什么他也有一个要点,而我没有。正如我所说,我还希望文本与项目符号一起移动(每个数据文件的文本相同)。

    我认为您可以使用如下循环:

    n = 0
    do for [ii=0:60] {
        n=n+1
        set output sprintf('png/spiral%03.0f.png',n)
        plot 'data.dat' every ::ii::ii w p ls 1, \
       'data.dat' using 1:2:("foo") every ::ii::ii w labels offset 2
    }
    
    set label 1 "hyde" at 275,-275
    
    do for [ii=60:0:-1] {
        n=n+1
        set output sprintf('png/spiral%03.0f.png',n)
        plot 'data.dat' every ::ii::ii w p ls 1, \
       'data.dat' using 1:2:("foo") every ::ii::ii w labels offset 2
    }
    
    结果如下:

    您可以使用
    offset
    坐标将标签文本
    “foo”
    定位到您想要的位置

    若要更改点的大小,请在脚本开头的“线样式”命令中更改
    ps
    的值

    我不确定这两个不同文件(1_1910.txt和2_1920.txt)的用途,因此我在示例中使用了相同的文件。如果同时打印两个不同的对象,则可能需要添加到“打印”命令

    至于您的其他问题,我认为仔细查看中的代码可以让您了解正在发生的事情。在示例中,范围
    every::1::ii
    绘制从
    1
    ii
    的点,给出一条线;范围
    every::ii::ii
    仅绘制一个点。请注意,示例中的缩写词
    w l
    w p
    分别扩展为带行的
    ,和带点的


    在本例中,由于第二个循环的操作,该行消失,该循环反向运行(
    对于[ii=99:1:-1]
    )。如果要复制该示例,请确保索引的值正确(可能有99个数据点以外的数字)。还要注意,gnuplot中的索引从0开始,因此如果数据文件的第一行包含数据(而不是头),那么您希望从
    ii=0
    开始循环,而不是从
    ii=1
    开始循环,我在这里遇到了几乎相同的问题。我发现了一个非常好的黑客!您只需在一个循环中使用
    set multiplot
    然后
    unset multiplot
    ,而不是创建多个png然后合并它们。具体来说,我是这样使用的:

    do for [i=0:k] 
    
    {    
    
        set multiplot 
    
        plot function1  
        plot function2    
        unset multiplot 
    
    }
    

    但不幸的是,除非您拥有的数据集已同步,否则这将无法工作!,但仍然可以使用if语句解决此问题!。祝你好运

    我确实需要并行绘制两个文件,但由于某种原因,当我添加另一个文件时(每个绘图都有两个额外的精确语句,只是文件名不同),我会出错。原始代码不会出现这种情况-我可以添加任意多的文件。知道为什么吗?如果没有看到一些代码,或者至少是错误消息/错误描述,我就不能确定。您的代码可能有错误的继续语法--
    ,在打印行的末尾是`s,在下一行的开头是filename(no
    plot`关键字)。