Looks like we have the culprit. Is this a bug or an
undocumented feature
I think that the current code is a bit of a hack that sometimes works and sometimes doesn't, depending on which backend you use.
and is there anything I should do about it (i.e.,
report it)?
Yes, I think so. It's not super difficult to find a solution, but it will need some discussion with the matplotlib developers to find the best way to fit this in with the existing matplotlib code.
More importantly, do you have any idea how to fix the
problem
In principle, it's simple. You'll need to split up the restore_background function in a frontend_restore_background and a backend_restore_background (arbitrary names, of course). The frontend_restore_background is what the user uses to tell matplotlib which background should be restored where. Inside the event loop, the backend_restore_background uses this information to do the actual blitting.
or how the event interactions with wxpython work?
I don't think it matters much, as long as the actual drawing is done from inside figure.draw(renderer).
Is it even feasible to do a
restore_canvas within the event loop
Absolutely. There is no essential difference between drawing a line or blitting a background. Imagine the code in figure.draw(renderer) to be something along the lines of
blit a background, if any
draw the lines, if any
fill shapes with color, if any
draw the text, if any
...
or will this slow it down to the extent of being useless?
I wouldn't know why.
--Michiel.
···
--- On Thu, 5/7/09, Elan Pavlov <epavlov@...287...> wrote:
From: Elan Pavlov <epavlov@...287...>
Subject: Re: [Matplotlib-users] Wxpython, Matplotlib and draw_artist
To: mjldehoon@...9...
Cc: matplotlib-users@lists.sourceforge.net
Date: Thursday, May 7, 2009, 10:23 AM
Hi,
By George, I think you've got it! That does explain the
fact that old
lines remain since the restore_background is what should
remove them.
To test out your hypotheses I added sleep commands after
every line in
the update_line() function and indeed a blank axes never
appears.
Looks like we have the culprit. Is this a bug or an
undocumented
feature and is there anything I should do about it (i.e.,
report it)?
More importantly, do you have any idea how to fix the
problem or how
the event interactions with wxpython work? Is it even
feasible to do a
restore_canvas within the event loop or will this slow it
down to the
extent of being useless?
Elan
---
I can no other answer make but thanks,
And thanks, and ever thanks.
- William Shakespeare
On Thu, May 7, 2009 at 9:17 AM, Michiel de Hoon > <mjldehoon@...9...> wrote:
>
> I am not sure if this is related, but maybe it can
give you a hint.
> I looked at the copy_from_bbox/restore/draw_artist
code a long time ago, and if I remember correctly by calling
restore_region function, you're drawing directly onto
the canvas. In contrast, if you do e.g. plot(x,y),
you're not drawing directly; you're just telling
matplotlib what you want to plot, but the actual plotting is
done by matplotlib by calling figure.draw(renderer).
Typically, this happens from inside the event loop, which is
how things are supposed to be. On the other hand,
restore_region bypasses the event loop, which is usually not
a good idea.
>
> --Michiel
>
>
>
>
> --- On Wed, 5/6/09, Elan Pavlov > <epavlov@...287...> wrote:
>
>> From: Elan Pavlov <epavlov@...287...>
>> Subject: [Matplotlib-users] Wxpython, Matplotlib
and draw_artist
>> To: matplotlib-users@lists.sourceforge.net
>> Date: Wednesday, May 6, 2009, 2:05 PM
>> Hi,
>> I can't get wxpython to play well with
matplotlib and
>> draw_artist.
>> After mucking around quite a bit I think I
narrowed it down
>> to the
>> draw_artist function The problem seems to be that
>> draw_artist when
>> working within wxpython (as opposed to a simple
mpl window)
>> doesn't
>> remove the old points it plotted. I adapted the
example
>> from the
>> cookbook
>>
(http://www.scipy.org/Cookbook/Matplotlib/Animations) to
>> illustrate this problem. I modified the example so
it is
>> updated on
>> mouse movements (followed by idle time) so that
the problem
>> is more
>> visual.
>>
>> Replacing the copy_from_bbox/restore/draw_artist
(i.e.
>> removing the
>> animated properties) with the simple draw causes
this to
>> work. The
>> copy_from_bbox/restore methods work as expected so
it seems
>> that the
>> problem is either the draw_artist (or possibly the
blit,
>> but that
>> seems unlikely).
>>
>> Is there something I am doing wrong?
>>
>> Elan
>> --
>> Beware of bugs in the above code; I have only
proved it
>> correct, not tried it.
>> - Donald Knuth
>>
------------------------------------------------------------------------------
>> The NEW KODAK i700 Series Scanners deliver under
ANY
>> circumstances! Your
>> production scanning environment may not be a
perfect world
>> - but thanks to
>> Kodak, there's a perfect scanner to get the
job done!
>> With the NEW KODAK i700
>> Series Scanner you'll get full speed at 300
dpi even
>> with all image
>> processing features enabled.
>>
http://p.sf.net/sfu/kodak-com_______________________________________________
>> Matplotlib-users mailing list
>> Matplotlib-users@lists.sourceforge.net
>>
matplotlib-users List Signup and Options
>