3 列のデータファイルがあり、splot を使用して同じものをプロットしたいと考えていました。しかし、私が欲しいのは、gnuplot が最初の行 (ある色、たとえば赤) をプロットしてから、たとえば 0.3 秒間一時停止し、次の行 (赤ではなく別の色、たとえば緑) のプロットに移動し、0.3 秒間一時停止することです。秒、次に次の行に進みます....などなど。
どんな助けでも大歓迎です。
前もって感謝します
よろしくパンカイ
gnuplot の現在のバージョン (この質問が投稿されてから 4 年以上経過しています) を使用すると、各行を1 つずつ描画する効果を(その間に少し間を置いて) 取得するのがおそらく簡単になります。
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 に (各ループで1
) 最初の行 ( ) から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
良い試みですが...これにより、データファイルの行数と同じ数のファイルが作成されます。これは私には醜く見えます。
次のようなコマンドを含む gnuplot スクリプトを作成するシェル/perl スクリプトを作成できます。
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 は、1 秒間一時停止します。
gnuplot にデータ ファイルを提供する代わりに、座標を直接プロットする方法がわかりませんが、これは単なるアイデアです。
アニメーションを作成する場合は、専用のツール (mplayer など) を使用することをお勧めします。
gnuplot を使用してすべてのソース画像を準備し (最初は 1 行プロット、2 つ目は 2 行など)、mplayer または convert (imagemagic から) を使用して、ソース ファイルから avi またはアニメーション GIF を生成します。
次のシェル スニペットを使用して、入力ファイルの部分的なコピーを生成し、それぞれの行数を増やすことができます。
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 からデータを取得するように設定してから、このスクリプト (paused-input.sh という名前) を使用して入力ファイルをパイプします。各行の後に一時停止します。
#!/bin/bash
while read l ; do
echo "$l"
sleep 1
done
次に、次のように呼び出します。
(pause-input.sh | gnuplot ...) < somefile.dat
プロットファイルを作成します。「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