【问题标题】:Perl PDL -> GnuPlot -> AutoScale => 95% WhiteSpace?Perl PDL -> GnuPlot -> AutoScale => 95% WhiteSpace?
【发布时间】: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


    【解决方案1】:

    缺少一个完整的、最低限度的工作示例和一个实际上是一个问题或一个经过深思熟虑的问题陈述的问题标题可能是这个问题尚未得到回答的原因。

    我的问题是,为什么要使用autoscale=&gt;''?。 PDL::Graphics::Gnuplot 的自动缩放绘图选项的文档指出“默认情况下,所有轴都是自动缩放的,除非您在该轴上指定范围......”。所以我可以通过将自动缩放保留为默认值来产生我认为你想要的东西:

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

    这将导致$py 几乎填满整个绘图窗口,顶部和底部有一点缓冲区。

    关于您的第二个问题(理想的自动缩放考虑了数据的差异并且不会绘制极端异常值),听起来您是在要求计算机执行您的意思,而不是你实际上告诉它做什么。 Gnuplot 与大多数绘图软件一样,默认情况下会绘制所有数据。如果这不合适,则由您指定适当的轴范围。您还可以查看Using gnuplot, how to 'cut out' usused y-axis regions of the graph,了解如何创建断轴。

    【讨论】:

      猜你喜欢
      • 2012-02-19
      • 1970-01-01
      • 2017-09-06
      • 1970-01-01
      • 2020-06-16
      • 2014-02-21
      • 2012-01-24
      • 2015-09-11
      • 2019-07-13
      相关资源
      最近更新 更多