【发布时间】:2016-09-16 15:52:05
【问题描述】:
要绘制的 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 范围的错误数据,而不是 Y=0 附近的 ~0 范围
结果:Y 范围 [-10 .. 10]
误差线是图表中间的平线,内容约为 0。
在整个 20 个单位的 Y 范围内,只有 [0 .. 1] 有任何数据,因此 95% 是空白。
理想的“自动”缩放:支持“标准差”缩放,其中一些“离群”数据点将被推离图表,以更好地显示大量数据。
案例:错误的 XY 数据。在极端情况下,Y 误差值与平均值相比是巨大的,大约 14 sigma。自动缩放将 98% 的数据压缩到零像素内。
如果我计算标准偏差并手动将 yrange=>[$ylo, $yhi] 设置为平均值 +- 1 sigma,它看起来很有信息。
除了 max/min 或数量级的 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
【问题讨论】:
标签: pdl