Re: [Matplotlib-users] move legend to the foreground: how to use set_zorder() correctly?

2012-03-26 Thread Jae-Joon Lee
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


[Matplotlib-users] move legend to the foreground: how to use set_zorder() correctly?

2012-03-22 Thread David Verelst
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