Skip to content

Commit 5b93d85

Browse files
committed
axisbelow should just set zorder.
1 parent 7673002 commit 5b93d85

File tree

3 files changed

+33
-62
lines changed

3 files changed

+33
-62
lines changed

lib/matplotlib/axes/_base.py

Lines changed: 22 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -487,7 +487,6 @@ def __init__(self, fig, rect,
487487
if self._position.width < 0 or self._position.height < 0:
488488
raise ValueError('Width and height specified must be non-negative')
489489
self._originalPosition = self._position.frozen()
490-
# self.set_axes(self)
491490
self.axes = self
492491
self._aspect = 'auto'
493492
self._adjustable = 'box'
@@ -511,7 +510,7 @@ def __init__(self, fig, rect,
511510
facecolor = rcParams['axes.facecolor']
512511
self._facecolor = facecolor
513512
self._frameon = frameon
514-
self._axisbelow = rcParams['axes.axisbelow']
513+
self.set_axisbelow(rcParams['axes.axisbelow'])
515514

516515
self._rasterization_zorder = None
517516

@@ -2553,18 +2552,7 @@ def draw(self, renderer=None, inframe=False):
25532552
for spine in six.itervalues(self.spines):
25542553
artists.remove(spine)
25552554

2556-
if self.axison and not inframe:
2557-
if self._axisbelow is True:
2558-
self.xaxis.set_zorder(0.5)
2559-
self.yaxis.set_zorder(0.5)
2560-
elif self._axisbelow is False:
2561-
self.xaxis.set_zorder(2.5)
2562-
self.yaxis.set_zorder(2.5)
2563-
else:
2564-
# 'line': above patches, below lines
2565-
self.xaxis.set_zorder(1.5)
2566-
self.yaxis.set_zorder(1.5)
2567-
else:
2555+
if not self.axison or inframe:
25682556
for _axis in self._get_axis_list():
25692557
artists.remove(_axis)
25702558

@@ -2635,9 +2623,7 @@ def get_renderer_cache(self):
26352623
# Axes rectangle characteristics
26362624

26372625
def get_frame_on(self):
2638-
"""
2639-
Get whether the axes rectangle patch is drawn.
2640-
"""
2626+
"""Get whether the axes rectangle patch is drawn."""
26412627
return self._frameon
26422628

26432629
def set_frame_on(self, b):
@@ -2649,6 +2635,8 @@ def set_frame_on(self, b):
26492635
Parameters
26502636
----------
26512637
b : bool
2638+
..
2639+
ACCEPTS: bool
26522640
"""
26532641
self._frameon = b
26542642
self.stale = True
@@ -2660,16 +2648,28 @@ def get_axisbelow(self):
26602648
return self._axisbelow
26612649

26622650
def set_axisbelow(self, b):
2663-
"""
2664-
Set whether axis ticks and gridlines are above or below most artists.
2651+
"""Set the zorder for the axes ticks and gridlines.
2652+
2653+
``True`` corresponds to a zorder of 0.5, ``False`` to a zorder of 2.5,
2654+
and ``"line"`` to a zorder of 1.5.
26652655
26662656
.. ACCEPTS: [ bool | 'line' ]
26672657
26682658
Parameters
26692659
----------
26702660
b : bool or 'line'
26712661
"""
2672-
self._axisbelow = validate_axisbelow(b)
2662+
self._axisbelow = axisbelow = validate_axisbelow(b)
2663+
if axisbelow is True:
2664+
zorder = 0.5
2665+
elif axisbelow is False:
2666+
zorder = 2.5
2667+
elif axisbelow == "line":
2668+
zorder = 1.5
2669+
else:
2670+
raise ValueError("Unexpected axisbelow value")
2671+
for axis in self._get_axis_list():
2672+
axis.set_zorder(zorder)
26732673
self.stale = True
26742674

26752675
@docstring.dedent_interpd
@@ -2697,6 +2697,8 @@ def grid(self, b=None, which='major', axis='both', **kwargs):
26972697
26982698
%(Line2D)s
26992699
2700+
Note that the grid will be drawn according to the axes' zorder and not
2701+
its own.
27002702
"""
27012703
if len(kwargs):
27022704
b = True

lib/matplotlib/tests/test_image.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -783,7 +783,6 @@ def test_imshow_masked_interpolation():
783783
N = 20
784784
n = colors.Normalize(vmin=0, vmax=N*N-1)
785785

786-
# data = np.random.random((N, N))*N*N
787786
data = np.arange(N*N, dtype='float').reshape(N, N)
788787

789788
data[5, 5] = -1

lib/mpl_toolkits/mplot3d/axes3d.py

Lines changed: 11 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -99,9 +99,7 @@ def __init__(self, fig, rect=None, *args, **kwargs):
9999
self._shared_z_axes.join(self, sharez)
100100
self._adjustable = 'datalim'
101101

102-
super(Axes3D, self).__init__(fig, rect,
103-
frameon=True,
104-
*args, **kwargs)
102+
super(Axes3D, self).__init__(fig, rect, frameon=True, *args, **kwargs)
105103
# Disable drawing of axes by base class
106104
super(Axes3D, self).set_axis_off()
107105
# Enable drawing of axes by Axes3D class
@@ -274,28 +272,28 @@ def draw(self, renderer):
274272
renderer.eye = self.eye
275273
renderer.get_axis_position = self.get_axis_position
276274

277-
# Calculate projection of collections and zorder them
275+
# Calculate projection of collections and patches and zorder them.
276+
# Make sure they are drawn above the grids.
277+
zorder_offset = max(axis.get_zorder()
278+
for axis in self._get_axis_list()) + 1
278279
for i, col in enumerate(
279280
sorted(self.collections,
280281
key=lambda col: col.do_3d_projection(renderer),
281282
reverse=True)):
282-
col.zorder = i
283-
284-
# Calculate projection of patches and zorder them
283+
col.zorder = zorder_offset + i
285284
for i, patch in enumerate(
286285
sorted(self.patches,
287286
key=lambda patch: patch.do_3d_projection(renderer),
288287
reverse=True)):
289-
patch.zorder = i
288+
patch.zorder = zorder_offset + i
290289

291290
if self._axis3don:
292-
axes = (self.xaxis, self.yaxis, self.zaxis)
293291
# Draw panes first
294-
for ax in axes:
295-
ax.draw_pane(renderer)
292+
for axis in self._get_axis_list():
293+
axis.draw_pane(renderer)
296294
# Then axes
297-
for ax in axes:
298-
ax.draw(renderer)
295+
for axis in self._get_axis_list():
296+
axis.draw(renderer)
299297

300298
# Then rest
301299
super(Axes3D, self).draw(renderer)
@@ -1280,34 +1278,6 @@ def set_frame_on(self, b):
12801278
self._frameon = bool(b)
12811279
self.stale = True
12821280

1283-
def get_axisbelow(self):
1284-
"""
1285-
Get whether axis below is true or not.
1286-
1287-
For axes3d objects, this will always be *True*
1288-
1289-
.. versionadded :: 1.1.0
1290-
This function was added for completeness.
1291-
"""
1292-
return True
1293-
1294-
def set_axisbelow(self, b):
1295-
"""
1296-
Set whether axis ticks and gridlines are above or below most artists.
1297-
1298-
For axes3d objects, this will ignore any settings and just use *True*
1299-
1300-
.. versionadded :: 1.1.0
1301-
This function was added for completeness.
1302-
1303-
Parameters
1304-
----------
1305-
b : bool
1306-
.. ACCEPTS: bool
1307-
"""
1308-
self._axisbelow = True
1309-
self.stale = True
1310-
13111281
def grid(self, b=True, **kwargs):
13121282
'''
13131283
Set / unset 3D grid.

0 commit comments

Comments
 (0)