2012-05-01 16 views
0

プロットするデータが大量にあり、gnuplotを使用しようとしています。データは約80000要素のソートされた配列です。単に大きなグループ化されたデータプロット

plot "myData.txt" using 1:2 with linespoints linetype 1 pointtype 1 

を使用することにより、私は出力を得るが、:それはレンダリングに時間がかかり、ポイントが時折ギャップで、多くの場合、雑然としています。 2番目に取り組むために、私は棒グラフをすることを考えました:エントリのそれぞれ はバーに対応するでしょう。しかし、私はこれを達成する方法がわかりません。私は連続したバーの間にあるスペースを持っていたいと思いますが、それが見えるとは思っていません。データをプロットするためのあなたの提案は何ですか?

........................

大規模なデータ量のために、私はそれがグループに最高だと思います。私はすなわち、3のグループでデータをプロットしたいと思います。私のデータは

1 11041.9 
2 11041.9 
3 9521.07 
4 9521.07 
5 9520.07 
6 9519.07 
7 9018.07 
... 

のように見えること 注意、最初の縦線は、1からポイントの最小値として9521.07で開始する2、3べきです2番目の垂直線は、次の3点を考慮する必要があります:4,5、および6 9521.07のように9519.07で開始し、以下同様に続きます。

gnuplotを使って説明したデータファイルがあれば、これを達成できますか?もしそうなら、誰かが私が使うはずのコマンドを投稿してもらえたらうれしいです。

答えて

2

gnuplotが実際に描画するポイント数を減らすには、everyというキーワードを使用します。

plot "myData.txt" using 1:2 with linespoints linetype 1 pointtype 1 every 100 

は、100番目のデータポイントごとにプロットします。

gnuplotの中で、(縦線をプロットして)好きなことをできるかどうかはわかりませんが、ここで私の解決策(UNIX-y環境を想定)です。まずsort.awkと呼ばれるawkスクリプト作成:

BEGIN { RS = "" } 
{ 
# the next two lines handle the case where 
# there are not three lines in a record 
xval = $1 + 1 
ymin = ymax = $2 
# find y minimum 
if ($2 <= $4 && $2 <= $6) 
    ymin=$2 
else if ($4 <= $2 && $4 <= $6 && $4 != "") 
    ymin=$4 
else if ($6 <= $2 && $6 <= $4 && $6 != "") 
    ymin=$6 
# find y maximum 
if ($2 >= $4 && $2 >= $6) 
    ymax=$2 
else if ($4 >= $2 && $4 >= $6) 
    ymax=$4 
else if ($6 >= $2 && $6 >= $4) 
    ymax=$6 
# print the formatted line 
print ($1+1) " " ymin " " ymin " " ymax " " ymax 
} 

を今、このgnuplotのスクリプトは、それを呼び出します:

set terminal postscript enhanced color 
set output 'plot.eps' 

set boxwidth 3 
set style fill solid 
plot "<sed 'n;n;G;' myData.txt | awk -f sort.awk" with candlesticks title 'pretty data' 

それはきれいではありませんが、それは動作します。 sedは3行ごとに空白行を追加し、awkcandlesticksスタイルの出力を書式設定します。また、gnuplotスクリプトにawkスクリプトを埋め込むこともできます。

+0

ありがとう:

ので、すべての作業を完了、あなたはこのような何かを持っていると思います。私は私の質問編集から見ることができるように、データをグループ化することに決めました。私はあなたに有用なコメントがあることを願っています。 – user506901

+0

私の編集したポストを参照してください。 – andyras

1

あなたはそのようなことをすることができます...(これはunix上で最も簡単です)。 3行おきにスペースを挿入する必要があります。周りには何も表示されません。あなたがUNIX上にいる場合、コマンドは

awk 'NR % 3 == 0 {print ""} 1' myfile 

とする必要があります。 (How do I insert a blank line every n lines using awk?を参照してください)

もちろん、あなたはgnuplotファイルにそれをまっすぐにパックすることができます。

xval(x)=int(x)/3 #Return the x position on the plot 
plot "< awk 'NR % 3 == 0 {print ""} 1' datafile" using (xval($1)):2 with lines 
関連する問題