プロットする 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