1

このプロットを gnuplot で再現したいと思います:

ここに画像の説明を入力

私のデータは次の形式です。

データ
1: 時間
2: 価格
3: 出来高

私はこれを試しました:

plot file using 1:2 with lines, '' using 1:3 axes x1y2 with impulses

これにより、y1価格とy2ボリュームの通常の時系列チャートが得られます。
次に、私は試しました:

plot file using 2:1 with lines, '' using 2:3 axes x1y2 with impulses 

y1これは、時間とy2量の価格シリーズを提供します。ただし、価格を に維持しy1、ボリュームをに維持する必要がありx2ます。

たぶん次のようなもの:

plot file using 1:2 with lines,' ' using 2:3 axes y1x2 with impulses

しかし、それは私が望むものを与えません。

4

1 に答える 1

3

Gnuplotこの種の水平ボックスプロットを描画する公式の方法はありません。ただし、これを実現するためにboxxyerrorbars(短縮形boxxy) を使用できます。

実際の例のテスト データがないため、ガウス ランダム ウォークからデータ ファイルを生成しました。データを生成するには、次のpythonスクリプトを実行します。

from numpy import zeros, savetxt, random

N = 500
g = zeros(N)
for i in range(1, N):
    g[i] = g[i-1] + random.normal()

savetxt('randomwalk.dat', g, delimiter='\t', fmt='%.3f')

次に、「位置データ」(この場合はボリューム データ) のビニングを行います。これには を使用できますsmooth frequency。これはy、同じx値の値の合計を計算します。x最初に、特定の範囲 ( +- )に対して同じ値を返す適切なビニング関数を使用しますbinwidth/2。出力データはファイルに保存されます。これは、プロットのために交換xしてy値を付ける必要があるためです。

binwidth = 2
hist(x) = floor(x+0.5)/binwidth

set output "| head -n -2 > randomwalk.hist"
set table
plot 'randomwalk.dat' using (hist($1)):(1) smooth frequency
unset table
unset output

通常は を使用できるはずですがset table "randomwalk.hist"、バグのため、テーブル出力の最後のエントリを除外するためにこの回避策が必要です。Gnuplot の 'set table' オプションが最初のエントリを書き換える理由に対する私の回答を参照してください。最後の行?.

実際のプロット部分は次のとおりです。

unset key
set x2tics
set xtics nomirror

set xlabel 'time step'
set ylabel 'position value'
set x2label 'frequency'

set style fill solid 1.0 border lt -1

set terminal pngcairo
set output 'randwomwalk.png'

plot 'randomwalk.hist' using ($2/2.0):($1*binwidth):($2/2.0):(binwidth/2.0) with boxxy lc rgb '#00cc00' axes x2y1,\
     'randomwalk.dat' with lines lc rgb 'black'

結果が得られます(4.6.3では、もちろんランダムデータに依存します):

ここに画像の説明を入力

したがって、データ構造では、次のスクリプトが機能するはずです。

reset
binwidth = 2
hist(x) = floor(x+0.5)/binwidth
file = 'data.txt'
histfile = 'pricevolume.hist'

set table histfile
plot file using (hist($2)):($3) smooth unique
unset table

# get the number of records to skip the last one
stats histfile using 1 nooutput

unset key
set x2tics
set xtics nomirror

set xlabel 'time'
set ylabel 'price'
set x2label 'volume'

set style fill solid 1.0 border lt -1

plot histfile using ($2/2.0):($1*binwidth):($2/2.0):(binwidth/2.0) every ::::(STATS_records-2) with boxxy lc rgb '#00cc00' axes x2y1,\
     file with lines using 1:2 lc rgb 'black'

今回、最後のエントリのスキップは、コマンドでtableすべてのエントリをカウントし、最後のエントリを でスキップすることによって行われることに注意してください(ポイントの番号付けは から始まるため、正しいです)。この亜種は、外部ツールを必要としません。statseverySTATS_records-20

smooth uniqueまた、合計の代わりに の平均値を計算するも使用します (これは で行われsmooth frequencyます)。

于 2013-09-19T15:32:17.693 に答える