# move legend to the foreground

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