Plot not robust with respect to Inf values

Jaroslav Hajek highegg at gmail.com
Sun Aug 24 00:43:51 CDT 2008


On Thu, Aug 21, 2008 at 9:30 PM, John W. Eaton <jwe at bevo.che.wisc.edu> wrote:
> On 21-Aug-2008, John W. Eaton wrote:
>
> | On  6-Aug-2008, gOS wrote:
> |
> | |
> | | Attempting to pass Inf or NaN to plot results in interestingly different
> | | results, and there's a bug somewhere in it.
> | |
> | | plot(NaN,NaN) results in
> | | error: plot: expecting first argument to be asex handle ... etc
> | |
> | | plot(Inf,Inf) results in
> | | line 15: undefined variable: Inf
> | |
> | | gnuplot> plot "-" using ($1):($2) axes x1y1 title "" with lines ...
> | |
> | | I'd assume that there is some sort of failure on all graphics packages. As
> | | Inf and NaN can appear in matrices, shouldn't plot be able to identify when
> | | its passed data it shouldn't be passed?
> | |
> | | I view this as a bug. Matlab simply returns a blank plot while not crashing,
> | | if this isn't possible in Octave for each back end it probably needs to be
> | | handled.
> | |
> | | Even getting an error from Octave instead of gnuplot would be good enough
> | | for me, currently operations procede if Inf is present so there is no way to
> | | catch on the issue besides checking every value in the matrix before
> | | plotting.
> |
> | Please try the following change.
> |
> | jwe
>
> Sorry, that was the wrong changeset file.  The correct one is
> attached below.
>
> jwe
>
>
> # HG changeset patch
> # User John W. Eaton <jwe at octave.org>
> # Date 1219346938 14400
> # Node ID 2f7ff06c0c7b0f28ea726b304c8a5afdc7788ccd
> # Parent  d54f113aa9839a33022065acc0d0250b53bb0dea
> __go_draw_axes__.m (__gnuplot_write_data__): write "Inf Inf\n" if all data pairs contain NaN values
>
> diff --git a/scripts/ChangeLog b/scripts/ChangeLog
> --- a/scripts/ChangeLog
> +++ b/scripts/ChangeLog
> @@ -1,3 +1,9 @@
> +2008-08-21  John W. Eaton  <jwe at octave.org>
> +
> +       * plot/__go_draw_axes__.m: Fix test for have_data.
> +       (__gnuplot_write_data__): Write "Inf Inf\n" if all data pairs
> +       contain NaN values.
> +
>  2008-08-21  Thomas Treichl  <Thomas.Treichl at gmx.net>
>
>        * optimization/sqp.m: Increase test script tolerance.
> diff --git a/scripts/plot/__go_draw_axes__.m b/scripts/plot/__go_draw_axes__.m
> --- a/scripts/plot/__go_draw_axes__.m
> +++ b/scripts/plot/__go_draw_axes__.m
> @@ -1021,7 +1021,7 @@
>       fputs (plot_stream, "unset hidden3d;\n");
>     endif
>
> -    have_data = (! (isempty (data) || any (cellfun (@isempty, data))));
> +    have_data = (! (isempty (data) || all (cellfun (@isempty, data))));
>
>     if (isempty (xlim))
>       return;
> @@ -1461,15 +1461,19 @@
>       n = columns (data);
>       have_nans = true;
>       num_nan_elts = numel (nan_elts);
> -      k = 1;
> -      for i = 1:n
> -       if (have_nans && i == nan_elts(k))
> -         fputs (plot_stream, "\n");
> -         have_nans = ++k <= num_nan_elts;
> -       else
> -         fprintf (plot_stream, fmt, data(:,i));
> -       endif
> -      endfor
> +      if (num_nan_elts == n)
> +       fputs (plot_stream, "Inf Inf\n");
> +      else
> +       k = 1;
> +       for i = 1:n
> +         if (have_nans && i == nan_elts(k))
> +           fputs (plot_stream, "\n");
> +           have_nans = ++k <= num_nan_elts;
> +         else
> +           fprintf (plot_stream, fmt, data(:,i));
> +         endif
> +       endfor
> +      endif
>     endif
>   elseif (nd == 3)
>     ## FIXME -- handle NaNs here too?
> diff --git a/scripts/plot/print.m b/scripts/plot/print.m
> --- a/scripts/plot/print.m
> +++ b/scripts/plot/print.m
> @@ -423,7 +423,7 @@
>     endif
>
>     if (! isempty (convertname))
> -      command = sprintf ("convert '%s' '%s'", name, convertname);
> +      command = sprintf ("convert '%s' '%s'", name, convertname)
>       [errcode, output] = system (command);
>       unlink (name);
>       if (errcode)
>
> _______________________________________________
> Bug-octave mailing list
> Bug-octave at octave.org
> https://www-old.cae.wisc.edu/mailman/listinfo/bug-octave
>
>

I transplanted this changeset without the removed semicolon in
print.m. John, please fix it if it was a mistake; otherwise, let me
know and I'll fix it.

regards

-- 
RNDr. Jaroslav Hajek
computing expert
Aeronautical Research and Test Institute (VZLU)
Prague, Czech Republic
url: www.highegg.matfyz.cz


More information about the Bug-octave mailing list