zorders are only meaningful among objects in a same axes.

An easy workaround is to move the legend in ax1 to ax2.

   ax2.add_artist(leg1)
   ax1.legend = None

Regards,

-JJ



On Thu, Mar 22, 2012 at 10:13 PM, David Verelst <david.vere...@gmail.com> wrote:
> Hi All,
>
> I am plotting on two different y-axes: one on the left (ax1) and one on
> the right (ax2). Both share the same x-axes. The problem I am facing
> relates back to the zorder of the legend (at least, that is what I
> think): I want it to be on the foreground at all times. In order to do
> so, I change the zorder of the ax1.legend (left y axes) such that the
> ax2.plots (right y-axes) are under ax1.legend. However, that doesn't
> work: all the plots on the right axes (so using ax2) end up above the
> legend 1 on the left, despite having a lower zorder.
>
> Note that I am also giving the grids on both ax1 and ax2 a lower zorder
> value compared to the legends, but the grid still ends up on top of
> legend 1 on the left.
>
> # version info:
>
> # Python 2.6.5 (r265:79063, Apr 16 2010, 13:57:41) [GCC 4.4.3] on linux2
>
> # NumPy 1.6.1, Matplotlib 1.1.0
>
> import pylab as plt
>
> import numpy as np
>
> # plotting on the left y-axes,
>
> ax1 = plt.axes(zorder=10)
>
> ax1.plot(range(0,5,1), 'r', label='ax1 ax1 ax1 ax1', zorder=11)
>
> ax1.plot(np.arange(3,4.1,1), 'r--', label='ax1 ax1 ax1 ax1', zorder=12)
>
> gr1 = ax1.grid(zorder=13)
>
> # legend of the left y-axes, force high zorder
>
> leg1 = ax1.legend(loc='upper left')
>
> leg1.set_zorder(30)
>
> # plotting on the right y-axes,
>
> ax2 = plt.twinx()
>
> ax2.set_zorder(20)
>
> ax2.plot(range(4,-1,-1), 'b', label='ax2 ax2 ax2 ax2', zorder=21)
>
> ax2.plot(np.arange(4,2.9,-1), np.arange(3,4.1,1), 'b--',
>
> label='ax2 ax2 ax2 ax2', zorder=22)
>
> gr2 = ax2.grid(zorder=23)
>
> # legend of the right y-axes, force high zorder
>
> leg2 = ax2.legend(loc='upper right')
>
> leg2.set_zorder(40)
>
> print '======= zorder:'
>
> print ' ax1: %i' % ax1.get_zorder()
>
> print ' ax2: %i' % ax2.get_zorder()
>
> print 'leg1: %i' % leg1.get_zorder()
>
> print 'leg2: %i' % leg2.get_zorder()
>
>
> What am I missing here?
> Thanks,
> David
>
>
>
> ------------------------------------------------------------------------------
> This SF email is sponsosred by:
> Try Windows Azure free for 90 days Click Here
> http://p.sf.net/sfu/sfd2d-msazure
> _______________________________________________
> Matplotlib-users mailing list
> Matplotlib-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/matplotlib-users

------------------------------------------------------------------------------
This SF email is sponsosred by:
Try Windows Azure free for 90 days Click Here 
http://p.sf.net/sfu/sfd2d-msazure
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

Reply via email to