2016-12-09 8 views
2

Gnuplotを使って同じグラフに複数のガウス関数をプロットしようとしていますが、これは非常に簡単なことです。問題は、ピークが重複しないことと、ピークが異なるように見える次の結果を得ることです。これをどうすれば解決できますか?Gnuplotでガウスピークが重なっていない

ugly thing

+1

、gnuplotに比較的新しいイム以来、どのように上の任意のコメントは、私はより良い品質のプロットを得ることができますか? –

答えて

4

まず、それはgnuplotは(任意のコンピュータプログラムがそれを行う必要がありますどのように本当にか)関数のプロットを生成する方法を理解するのに役立ちます。それは、連続関数をある種の離散表現に変換する必要があります。プロットされる数学関数は、独立軸(x)に沿った様々な点で評価されます。これにより、(x,y)のセットが作成されます。次に、これらの点の間に線を引く(「点を結ぶ」と考える)。想像しているように、使用される離散サンプルの数は、曲線の正確な表示方法と滑らかさの程度に影響します。

あなたが気づいた問題は、gnuplotのデフォルトのサンプルサイズが少し小さすぎるということです。デフォルト(私は信じている)は、可視のx軸を横切る100サンプルです。私はこの点を説明するためにガウス関数のいくつかの例のプロットを行った

set samples 1000 

で(例えば、1000年に)サンプル数を調整することができます。 (私はあなたのガウスパラメータの概算を行った。)各プロットは異なるsamplesの数があります:サンプルサイズが低すぎる行があまりにもギザギザ取得する方法

100 samples (default) 20 samples (too low) 1000 samples (plenty high)

お知らせ。デフォルト値の100でも値が低すぎます。 1000に設定するとスムーズになります。これはおそらくそれ以上のものですが、機能します。ビットマップイメージ(PNGなど)を生成する端末を使用している場合は、x軸のプロット領域に使用するピクセル幅よりも多くのサンプルを必要としません。ベクトルベースの出力を生成している場合は、使用しているものの「見た目が正しい」ものを選択してください。

詳細はGnuplot x-axis resolutionを参照してください。ところで


、上記の例を生成するためのコードは次のようになります。また、

set terminal pngcairo size 640,480 enhanced 

# Line styles 
set style line 1 lw 2 lc rgb "blue" 
set style line 2 lw 2 lc rgb "red" 
set style line 3 lw 2 lc rgb "yellow" 

# Gaussian function stuff 
set yrange [0:1.1] 
set xrange [-20:20] 
gauss(x,a) = exp(-(x/a)**2) 
eqn(a) = sprintf("y = e^{-(x/%d)^2}", a) 

# First example (default) 
set output "example1.png" 
set title "100 samples (default)" 
plot gauss(x,8) ls 1 title eqn(8), \ 
    gauss(x,2) ls 2 title eqn(2), \ 
    gauss(x,1) ls 3 title eqn(1) 

# Second example (too low) 
set output "example2.png" 
set title "20 samples (too low)" 
set samples 20 
replot 

# Third example (plenty high) 
set output "example3.png" 
set title "1000 samples (plenty high)" 
set samples 1000 
replot 
+0

ありがとう、それは非常に明確になっていました! –

関連する問題