Re: [Matplotlib-users] add to a canvas while preserving overall formatting

2010-02-16 Thread C M
On Tue, Feb 16, 2010 at 12:37 PM, John Hunter  wrote:
> On Tue, Feb 16, 2010 at 11:14 AM, C M  wrote:
>> I have a mpl graph embedded in wxPython, and I call a function,
>> customize_plot() to do a number of things to the plot:  adjust the
>> spacing around it, set the formatters, fontsizes, axis limits, set a
>> grid, etc.
>>
>> Now I want to potentially highlight points (by adding semi-transparent
>> points on top of existing ones) or annotate points with user
>> interaction.  If I do that, it seems I need to call canvas.draw().
>> But when I do that, it redraws the whole canvas and ignores some of
>> the formatting I laid out in customize_plot(), specifically the view
>> limits, and that's not acceptable.
>
> This isn't accurate -- calling draw will not change the view limits.
> In all likelihood what is happening is that when you add you your
> overlay markers, eg by calling "plot" the view limits are getting
> updated.  You can suppress this with
>
> ax.set_autoscale_on(False)
> ax.plot(overlay_markers)
> fig.canvas.draw()

Thank you, that's much easier than the animation option, which would
be more than I need to do.

Che

--
SOLARIS 10 is the OS for Data Centers - provides features such as DTrace,
Predictive Self Healing and Award Winning ZFS. Get Solaris 10 NOW
http://p.sf.net/sfu/solaris-dev2dev
___
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users


Re: [Matplotlib-users] add to a canvas while preserving overall formatting

2010-02-16 Thread John Hunter
On Tue, Feb 16, 2010 at 11:14 AM, C M  wrote:
> I have a mpl graph embedded in wxPython, and I call a function,
> customize_plot() to do a number of things to the plot:  adjust the
> spacing around it, set the formatters, fontsizes, axis limits, set a
> grid, etc.
>
> Now I want to potentially highlight points (by adding semi-transparent
> points on top of existing ones) or annotate points with user
> interaction.  If I do that, it seems I need to call canvas.draw().
> But when I do that, it redraws the whole canvas and ignores some of
> the formatting I laid out in customize_plot(), specifically the view
> limits, and that's not acceptable.

This isn't accurate -- calling draw will not change the view limits.
In all likelihood what is happening is that when you add you your
overlay markers, eg by calling "plot" the view limits are getting
updated.  You can suppress this with

ax.set_autoscale_on(False)
ax.plot(overlay_markers)
fig.canvas.draw()


> I want it to simply add the new points without changing any of the
> features of the plot.  Is there a way to do that?  In Googling for
> hints, I found this point from JDH from almost two years ago, which I
> think is applicable to my need:
>
>> If you call fig.canvas.draw, everything will be updated.  If you want
>> to selectively draw certain artists, you can use the animated property
>> w/ background copy/restore and the draw_artist method as described at
>
>> http://www.scipy.org/Cookbook/Matplotlib/Animations
>
> Is this still the case in the current version of matplotlib?  Or is
> there a newer way to do it now?

Yes, this is still accurate, and can be use for more efficient
updating, but it is unrelated to the problem with the view limits you
described.

JDH

--
SOLARIS 10 is the OS for Data Centers - provides features such as DTrace,
Predictive Self Healing and Award Winning ZFS. Get Solaris 10 NOW
http://p.sf.net/sfu/solaris-dev2dev
___
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users


[Matplotlib-users] add to a canvas while preserving overall formatting

2010-02-16 Thread C M
I have a mpl graph embedded in wxPython, and I call a function,
customize_plot() to do a number of things to the plot:  adjust the
spacing around it, set the formatters, fontsizes, axis limits, set a
grid, etc.

Now I want to potentially highlight points (by adding semi-transparent
points on top of existing ones) or annotate points with user
interaction.  If I do that, it seems I need to call canvas.draw().
But when I do that, it redraws the whole canvas and ignores some of
the formatting I laid out in customize_plot(), specifically the view
limits, and that's not acceptable.

I want it to simply add the new points without changing any of the
features of the plot.  Is there a way to do that?  In Googling for
hints, I found this point from JDH from almost two years ago, which I
think is applicable to my need:

> If you call fig.canvas.draw, everything will be updated.  If you want
> to selectively draw certain artists, you can use the animated property
> w/ background copy/restore and the draw_artist method as described at

> http://www.scipy.org/Cookbook/Matplotlib/Animations

Is this still the case in the current version of matplotlib?  Or is
there a newer way to do it now?

Thank you for any suggestions,
Che

--
SOLARIS 10 is the OS for Data Centers - provides features such as DTrace,
Predictive Self Healing and Award Winning ZFS. Get Solaris 10 NOW
http://p.sf.net/sfu/solaris-dev2dev
___
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users