3 XY наборов данных для построения:Perl PDL -> GnuPlot -> AutoScale => 95% WhiteSpace?
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 Диапазона вблизи Y = 0
Результат: Y Диапазон [-10 .. 10]
линии Ошибки плоская линия в середине графика с содержимым ~ 0. Во всем диапазоне 20 единиц Y только [0 .. 1] имеет любые данные, поэтому 95% - пустое место.
IDEAL «Авто» масштабирование: масштабирование «стандартного отклонения», при котором несколько «отдаленных» точек данных будут сдвинуты с графика, чтобы лучше показать основную часть данных.
Дело в точке: данные об ошибке XY. На крайних концах значения ошибки Y являются гигантскими по сравнению со средними, примерно 14 сигм. Автоматическое масштабирование выдавливает 98% данных в пределах нуля.
Если я рассчитываю стандартное отклонение и вручную устанавливаю yrange => [$ ylo, $ yhi] на что-то вроде средней + - 1 сигма, он выглядит информативным.
Есть ли какой-либо способ получить РАЗУМНЫЙ-ШКАЛ, отличный от max/min или порядка AUTOSCALE?
#!/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