5

3 列のデータファイルがあり、splot を使用して同じものをプロットしたいと考えていました。しかし、私が欲しいのは、gnuplot が最初の行 (ある色、たとえば赤) をプロットしてから、たとえば 0.3 秒間一時停止し、次の行 (赤ではなく別の色、たとえば緑) のプロットに移動し、0.3 秒間一時停止することです。秒、次に次の行に進みます....などなど。

どんな助けでも大歓迎です。

前もって感謝します

よろしくパンカイ

4

4 に答える 4

2

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
于 2013-01-07T22:31:07.050 に答える
2

良い試みですが...これにより、データファイルの行数と同じ数のファイルが作成されます。これは私には醜く見えます。

次のようなコマンドを含む 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 にデータ ファイルを提供する代わりに、座標を直接プロットする方法がわかりませんが、これは単なるアイデアです。

于 2010-02-26T17:11:50.247 に答える
2

アニメーションを作成する場合は、専用のツール (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
于 2008-10-22T06:34:00.773 に答える
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 に答える