5

我有一个 3 列数据文件,我想使用 splot 来绘制相同的图。但我想要的是 gnuplot 绘制第一行(以某种颜色,比如红色),然后暂停 0.3 秒,然后继续绘制下一行(以其他颜色,不是红色,比如绿色),暂停 0.3秒,然后继续下一行....依此类推。

任何帮助将不胜感激。

提前致谢

问候潘卡伊

4

4 回答 4

2

如果要制作动画,最好使用专门的工具(如 mplayer)。

使用 gnuplot 准备所有源图像(第一个绘制单行,第二个 - 两行等),然后使用 mplayer 或 convert(来自 imagemagic)从源文件中生成 avi 或动画 GIF。

您可以使用以下 shell 片段生成输入文件的部分副本,每个副本的行数都在增加。

file="your input file.dat"
lines=$(wc -l $file)
i=1
while [ $i -le $lines ] ; do
  head -${i} ${file} > ${file%.dat}-${i}lines.dat
done

给定 somefile.dat 这将产生文件“somefile-1lines.dat”、“somefile-2lines.dat”等。然后你可以使用:

for f in *lines.dat ; do
  gnuplot ... $f 
done

按顺序绘制它们。

如果我的假设是错误的并且您真正想要的只是这个暂停,那么您可以尝试进行设置,以便 gnuplot 将从标准输入获取数据,然后使用此 scipt(将其命名为 paused-input.sh)通过管道输入文件在每一行之后暂停:

#!/bin/bash
while read l ; do
  echo "$l"
  sleep 1
done

然后像这样调用它:

(pause-input.sh | gnuplot ...) < somefile.dat
于 2008-10-22T06:34:00.773 回答
2

很好的尝试,但是......这将创建与数据文件中的行数一样多的文件。这在我看来很难看。

我们可以编写一个 shell/perl 脚本来创建带有如下命令的 gnuplot 脚本:

splot x1 y1 z1
pause 1
replot x2 y2 z2
pause 1
replot x3 y3 z3
pause 1
replot x4 y4 z4

其中 xi, yi, zi = 数据文件中第 i 行号的坐标。pause 1 将暂停一秒钟。

这只是一个想法,虽然我不确定如何直接绘制坐标而不是向 gnuplot 提供数据文件。

于 2010-02-26T17:11:50.247 回答
2

使用当前版本的 gnuplot 可能更容易获得一次绘制每一行的效果(中间有一点停顿)(这个问题发布已经超过 4 年了)。

您可以使用for-loop 和every关键字,如下所示:

# Find out the number of lines in the data somehow, 
# for example like this:
num_lines="`cat my_datafile.d | wc -l`"

# Plot the first line in the data-file:
plot './my_datafile.d' every 1::0::0

# For the remaining lines:
do for [line_index = 1:num_lines-1] { 
  pause 0.3
  # Replot (from the same datafile) each line 
  # in the data file from the first one up to 
  # the current line_index 
  replot '' every 1::0::line_index
}

every 1::0::line_index部分指示 gnuplot - 在每个循环中 - 绘制数据中的每一行 (the 1),从第一个 (the 0) 到循环变量的当前值line_index。我们使用的是<point_incr>,<start_point><end_point>在 gnuplot 的帮助文本中提到:

 gnuplot> help every
 The `every` keyword allows a periodic sampling of a data set to be plotted.
 [...]

 Syntax:
    plot 'file' every {<point_incr>}
                       {:{<block_incr>}
                         {:{<start_point>}
                           {:{<start_block>}
                             {:{<end_point>}
                               {:<end_block>}}}}}
 [...]

版本信息:

$ gnuplot --version
gnuplot 4.6 patchlevel 0
于 2013-01-07T22:31:07.050 回答
0

制作一个情节文件,例如。'myplotfile.plt'。并将您通常在 gnuplot 中键入的所有命令放入其中以绘制图形。

然后只需添加该行

!sleep $Number_of_Seconds_to_Pause

到您希望它暂停的绘图文件,然后从终端运行它

gnuplot myplotfile.plt

(绘图文件的扩展名无关紧要,如果您使用的是 windows 或 mac 机器,您可能希望使用 .txt)

绘图文件示例:

set title 'x squared'
plot x**2 title ''
!sleep 5
set title 'x cubed'
plot x**3 title ''
!sleep 5
于 2010-03-29T14:44:47.960 回答