help-octave
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Autosaving plots after each modification


From: Ben Abbott
Subject: Re: Autosaving plots after each modification
Date: Wed, 18 Feb 2015 08:37:47 -0500

> On Feb 18, 2015, at 12:14 AM, Alex K <address@hidden> wrote:
> 
> On Fri Feb 13 2015 at 1:53:40 PM Ben Abbott <address@hidden> wrote:
> 
>> On Feb 13, 2015, at 9:14 AM, Ben Abbott <address@hidden> wrote:
>> 
>>> On Feb 13, 2015, at 2:26 AM, Alex K <address@hidden> wrote:
>>> 
>>> On Wed Feb 11 2015 at 4:36:55 PM Ben Abbott <address@hidden> wrote:
>>> > On Feb 11, 2015, at 1:39 PM, Alex K <address@hidden> wrote:
>>> >
>>> > Hi!
>>> >
>>> > Is it possible to run a custom function every time any plot is changed? 
>>> > For example, when running `plot`, `axis` etc., if they modify a figure on 
>>> > the screen I would like to detect that and save it to a new file.
>>> >
>>> > I use gnuplot as backend, so any solution involving configuring gnuplot 
>>> > will also work for me.
>>> >
>>> > Thanks!
>>> > Alex
>>> 
>>> If you can provide mode details, someone may have a more efficient solution 
>>> … but for a general solution I’d add a listener to the figures “children” 
>>> property.
>>> 
>>> See “help addlistener” to see how to do that.
>>> 
>>> Ben
>>> 
>>> Hi Ben,
>>> 
>>> Thanks for the reply! For more context, I'm trying to make octave auto-save 
>>> plots to files on the disk every time they are updated. I've tried 
>>> addlistener but it doesn't seem to work:
>>> 
>>>   function my_handler
>>>     fprintf ("my_handler called\n");
>>>   endfunction
>>>   addlistener (gcf, "children", address@hidden, "my string"})
>>>   sombrero
>>> 
>>> the handler is not getting called.
>>> 
>>> Best,
>>> Alex
>> 
>> Ok, that’s embarrassing. I get no error, and it doesn’t work for me either.
>> 
>> There are many examples of this working correctly in Octave’s sources. (take 
>> a look at the m-file code of plotyy or subplot for examples).
>> 
>> Does anyone see a problem with Alex’s example?
>> 
>> Ben
> 
> I filed a bug report.
> 
> https://savannah.gnu.org/bugs/index.php?44242
> 
> Ben
> 
> I guess I found the a way to get notification when the plot changes - it has 
> a "__modified__" property that I can add listener to. However, if I call 
> "print" from the handler, it doesn't work, giving a strange Ghostscript 
> error. Any ideas?
> 
> Code:
> 
>     function my_handler(h, dummy)
>       if (strcmp(get(h, "__modified__"), "off"))
>         disp 'saving snapshot...';
>         print(gcf, 'snapshot.png', '-debug', '-dpng', '-S640,480')
>       endif
>     endfunction
> 
>     addlistener (gcf, "__modified__", @my_handler);
> 
> Error message:
> 
>     plot(sin(-10:0.1:10))
>     saving snapshot...
>     Ghostscript command: '/usr/bin/gs -dQUIET -dNOPAUSE -dBATCH -dSAFER 
> -sDEVICE=png16m -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -r72x72 -dEPSCrop 
> -sOutputFile="snapshot.png" /tmp/oct-eyO49W.eps'
>     gnuplot-pipeline: '/usr/bin/gs -dQUIET -dNOPAUSE -dBATCH -dSAFER 
> -sDEVICE=png16m -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -r72x72 -dEPSCrop 
> -sOutputFile="snapshot.png" /tmp/oct-eyO49W.eps ; rm /tmp/oct-eyO49W.eps'
>     GPL Ghostscript 9.10: Unrecoverable error, exit code 1
>     rm: cannot remove '/tmp/oct-eyO49W.eps': No such file or directory
>     ---------- output begin ----------
>     Error: /undefinedfilename in (/tmp/oct-eyO49W.eps)
>     Operand stack:
> 
>     Execution stack:
>        %interp_exit   .runexec2   --nostringval--   --nostringval--   
> --nostringval--   2   %stopped_push   --nostringval--   --nostringval--   
> --nostringval--   false   1   %stopped_push
>     Dictionary stack:
>        --dict:1178/1684(ro)(G)--   --dict:0/20(G)--   --dict:77/200(L)--
>     Current allocation mode is local
>     Last OS error: No such file or directory
> 
>     ----------- output end -----------
>     error: print: failed to print
>     error: called from:
>     error:   /usr/share/octave/3.8.1/m/plot/util/private/__gnuplot_print__.m 
> at line 165, column 7
>     error:   /usr/share/octave/3.8.1/m/plot/util/print.m at line 423, column 
> 14
>     error:   my_handler at line 15, column 5
> 
> Thanks!
> Alex

Try adding a "drawnow ()" to the handler before the print command.

Ben





reply via email to

[Prev in Thread] Current Thread [Next in Thread]