0

プロットする 3 つの XY データセット:

A) Function plot XY
B) Polynomial, shares X with function, Y is poly_eval(x)
C) Polynomial_error;  X, Y=poly(x) - fct(x)
Range X:  ]0.0 .. 1.0[  (full range 0->1 plus some extra, both sides
Range Y:  ]0.0 .. 1.0[

募集: 3 つすべての XY データセットを、それが唯一のデータセットであるかのように自動スケーリングしてプロットします。予想: 「小さい」、上下の空白
Y=0 付近の ~0 範囲ではなく、Y 範囲全体にわたるエラー データ

結果: Y 範囲 [-10 .. 10]
エラー ラインは、コンテンツが ~0 のグラフの中央にある平らな線です。20 単位の Y 範囲全体で [0 .. 1] だけにデータがあるため、95% は空白スペースです。

理想的な「自動」スケーリング: データの大部分をより適切に表示するために、いくつかの「外れている」データ ポイントがグラフから押し出される「標準偏差」スケーリングをサポートします。

適切な例: エラー XY データ。極端な場合、Y エラー値は平均に比べて巨大で、約 14 シグマです。自動スケーリングは、データの 98% をゼロのピクセル内に押しつぶします。

標準偏差を計算し、手動で yrange=>[$ylo, $yhi] を平均 +- 1 シグマのような値に設定すると、有益に見えます。

最大/最小または桁数の AUTOSCALE 以外に REASONABLE-SCALE を取得する方法はありますか?

#!/usr/local/bin/perl -w

use PDL::IO::Misc;
use PDL::Graphics::Gnuplot;
use PDL::Fit::Polynomial;
use PDL::Core;
use List::Util qw(max min);

for($mi=0; $mi < scalar @mxa; $mi++)  {
    @xara = @{$mxa[$mi]};  # @MXA => Array of @xara 
    @yara = @{$mya[$mi]};  # @MYA => Array of @yara 
    $px   = pdl(\@xara);  
    $py   = pdl(\@yara);
    if($mi > 0)  {
        $pw->replot(with=>"lines", linewidth=>5, $px, $py);  # autoscale=>'', 
        next;  
    }
    # Use autoscale=>'' to "set [autoscale] all the axes at once" 
    $pw=gpwin("png", output=>"$imgfn", size=>[$pxres,$pyres,'px'],font=>"=11");
    $pw->plot(title=>"$title", xrange=>[$xlo, $xhi], xlab=>"$xlbl", 
        ylab=>["$ylbl", "offset 1"], autoscale=>'', 
        with=>"lines", linewidth=>5, linetype=>2, linestyle=>1, $px, $py);
}  # End For MI

5% のデータを使用した自動スケーリング

4

1 に答える 1

1

この質問がまだ回答されていないのは、完全で最小限の作業例と、実際に質問またはよく考えられたステートメントである質問のタイトルがないことが原因である可能性があります。

あなたへの私の質問は、なぜautoscale=>''? を使用するのかということです。PDL::Graphics::Gnuplot の autoscale プロット オプションのドキュメントには、「デフォルトでは、その軸の範囲を指定しない限り、すべての軸が自動スケーリングされる...」と記載されています。したがって、自動スケールをデフォルトのままにすることで、あなたが望むと思うようなものを生成できます。

$px=xvals(101)/100;
$py=0.96*sqrt($x)+.02;
$pw->plot(with=>'lines',$px,$py);

これにより$py、上部と下部に少しのバッファーがあり、プロット ウィンドウのほぼ全体がいっぱいになります。

2 番目の質問 (データの分散を考慮し、極端な外れ値をプロットしない理想的な自動スケーリング) については、実際に伝えていることではなく、意味することをコンピューターに求めているように思えます。することです。Gnuplot は、ほとんどのプロット ソフトウェアと同様に、デフォルトですべてのデータをプロットします。それが適切でない場合は、適切な軸範囲を指定する必要があります。また、壊れた軸を作成する方法については、Using gnuplot, how to 'cut out' usused y-axis regions of the graphを参照してください。

于 2016-08-19T16:28:30.553 に答える