我有一个3列数据文件,我想使用splot绘制相同的。 但我想要的是gnuplot绘制第一行(以某种颜色,比如红色),然后暂停0.3秒然后继续绘制下一行(其他颜色,不是红色,比如绿色),暂停0.3秒然后继续前进到下一行......所以就这样了。
非常感谢任何帮助。
提前致谢
关心Pankaj
答案 0 :(得分:2)
如果您想制作动画,最好使用专门的工具(如mplayer)。
使用gnuplot准备所有源图像(第一个绘制单行,第二个 - 两行等),然后使用mplayer或转换(来自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从stdin获取数据,然后使用此scipt(将其命名为paused-input.sh)来管道输入文件在每行后有暂停:
#!/bin/bash
while read l ; do
echo "$l"
sleep 1
done
然后像这样调用它:
(pause-input.sh | gnuplot ...) < somefile.dat
答案 1 :(得分: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行数的数据文件中的坐标。 暂停1将暂停一秒。
这只是一个想法,但我不确定如何直接绘制坐标而不是向gnuplot提供数据文件。
答案 2 :(得分:2)
要获得绘制每行一个的效果(中间有一点暂停)可能更容易使用当前版本的gnuplot(自此问题发布以来已超过4年)。
您可以使用for
- 循环和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 - 在每个循环中 - 绘制数据中的每一行(1
)从第一行(0
)到循环变量line_index
的当前值。我们使用的是gnuplot帮助文本中提到的<point_incr>
,<start_point>
和<end_point>
:
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
答案 3 :(得分:0)
制作一个情节文件,例如。 'myplotfile.plt'。并将通常在gnuplot中输入的所有命令放入其中以绘制图形。
然后只需添加行
!sleep $Number_of_Seconds_to_Pause
到您希望暂停的绘图文件中,然后使用
从终端运行它gnuplot myplotfile.plt
(plotfile的扩展名无关紧要,如果你在windows或mac框上,你可能想使用.txt)
plotfile的例子:
set title 'x squared'
plot x**2 title ''
!sleep 5
set title 'x cubed'
plot x**3 title ''
!sleep 5