Skip to content

Commit 7fc37cf

Browse files
committed
axisbelow should just set zorder.
1 parent 477c1dc commit 7fc37cf

File tree

3 files changed

+36
-72
lines changed

3 files changed

+36
-72
lines changed

lib/matplotlib/axes/_base.py

Lines changed: 25 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -488,7 +488,6 @@ def __init__(self, fig, rect,
488488
if self._position.width < 0 or self._position.height < 0:
489489
raise ValueError('Width and height specified must be non-negative')
490490
self._originalPosition = self._position.frozen()
491-
# self.set_axes(self)
492491
self.axes = self
493492
self.set_aspect('auto')
494493
self._adjustable = 'box'
@@ -499,15 +498,11 @@ def __init__(self, fig, rect,
499498
self._shared_x_axes.join(self, sharex)
500499
if sharex._adjustable == 'box':
501500
sharex._adjustable = 'datalim'
502-
# warnings.warn(
503-
# 'shared axes: "adjustable" is being changed to "datalim"')
504501
self._adjustable = 'datalim'
505502
if sharey is not None:
506503
self._shared_y_axes.join(self, sharey)
507504
if sharey._adjustable == 'box':
508505
sharey._adjustable = 'datalim'
509-
# warnings.warn(
510-
# 'shared axes: "adjustable" is being changed to "datalim"')
511506
self._adjustable = 'datalim'
512507
self.set_label(label)
513508
self.set_figure(fig)
@@ -530,7 +525,7 @@ def __init__(self, fig, rect,
530525
facecolor = rcParams['axes.facecolor']
531526
self._facecolor = facecolor
532527
self._frameon = frameon
533-
self._axisbelow = rcParams['axes.axisbelow']
528+
self.set_axisbelow(rcParams['axes.axisbelow'])
534529

535530
self._rasterization_zorder = None
536531

@@ -2397,18 +2392,7 @@ def draw(self, renderer=None, inframe=False):
23972392
for spine in six.itervalues(self.spines):
23982393
artists.remove(spine)
23992394

2400-
if self.axison and not inframe:
2401-
if self._axisbelow is True:
2402-
self.xaxis.set_zorder(0.5)
2403-
self.yaxis.set_zorder(0.5)
2404-
elif self._axisbelow is False:
2405-
self.xaxis.set_zorder(2.5)
2406-
self.yaxis.set_zorder(2.5)
2407-
else:
2408-
# 'line': above patches, below lines
2409-
self.xaxis.set_zorder(1.5)
2410-
self.yaxis.set_zorder(1.5)
2411-
else:
2395+
if not self.axison or inframe:
24122396
for _axis in self._get_axis_list():
24132397
artists.remove(_axis)
24142398

@@ -2481,21 +2465,17 @@ def get_renderer_cache(self):
24812465
# Axes rectangle characteristics
24822466

24832467
def get_frame_on(self):
2484-
"""
2485-
Get whether the axes rectangle patch is drawn.
2486-
"""
2468+
"""Get whether the axes rectangle patch is drawn."""
24872469
return self._frameon
24882470

24892471
def set_frame_on(self, b):
2490-
"""
2491-
Set whether the axes rectangle patch is drawn.
2492-
2493-
..
2494-
ACCEPTS: bool
2472+
"""Set whether the axes rectangle patch is drawn.
24952473
24962474
Parameters
24972475
----------
24982476
b : bool
2477+
..
2478+
ACCEPTS: bool
24992479
"""
25002480
self._frameon = b
25012481
self.stale = True
@@ -2507,17 +2487,28 @@ def get_axisbelow(self):
25072487
return self._axisbelow
25082488

25092489
def set_axisbelow(self, b):
2510-
"""
2511-
Set whether axis ticks and gridlines are above or below most artists.
2490+
"""Set the zorder for the axes ticks and gridlines.
25122491
2513-
..
2514-
ACCEPTS: [ bool | 'line' ]
2492+
``True`` corresponds to a zorder of 0.5, ``False`` to a zorder of 2.5,
2493+
and ``"line"`` to a zorder of 1.5.
25152494
25162495
Parameters
25172496
----------
25182497
b : bool or 'line'
2519-
"""
2520-
self._axisbelow = validate_axisbelow(b)
2498+
..
2499+
ACCEPTS: [ bool | 'line' ]
2500+
"""
2501+
self._axisbelow = axisbelow = validate_axisbelow(b)
2502+
if axisbelow is True:
2503+
zorder = 0.5
2504+
elif axisbelow is False:
2505+
zorder = 2.5
2506+
elif axisbelow == "line":
2507+
zorder = 1.5
2508+
else:
2509+
raise ValueError("Unexpected axisbelow value")
2510+
for axis in self._get_axis_list():
2511+
axis.set_zorder(zorder)
25212512
self.stale = True
25222513

25232514
@docstring.dedent_interpd
@@ -2546,6 +2537,8 @@ def grid(self, b=None, which='major', axis='both', **kwargs):
25462537
25472538
%(Line2D)s
25482539
2540+
Note that the grid will be drawn according to the axes' zorder and not
2541+
its own.
25492542
"""
25502543
if len(kwargs):
25512544
b = True

lib/matplotlib/tests/test_image.py

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

766-
# data = np.random.random((N, N))*N*N
767766
data = np.arange(N*N, dtype='float').reshape(N, N)
768767

769768
data[5, 5] = -1

lib/mpl_toolkits/mplot3d/axes3d.py

Lines changed: 11 additions & 39 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)
@@ -1269,32 +1267,6 @@ def set_frame_on(self, b):
12691267
self._frameon = bool(b)
12701268
self.stale = True
12711269

1272-
def get_axisbelow(self):
1273-
"""
1274-
Get whether axis below is true or not.
1275-
1276-
For axes3d objects, this will always be *True*
1277-
1278-
.. versionadded :: 1.1.0
1279-
This function was added for completeness.
1280-
"""
1281-
return True
1282-
1283-
def set_axisbelow(self, b):
1284-
"""
1285-
Set whether the axis ticks and gridlines are above or below
1286-
most artists
1287-
1288-
For axes3d objects, this will ignore any settings and just use *True*
1289-
1290-
ACCEPTS: [ *True* | *False* ]
1291-
1292-
.. versionadded :: 1.1.0
1293-
This function was added for completeness.
1294-
"""
1295-
self._axisbelow = True
1296-
self.stale = True
1297-
12981270
def grid(self, b=True, **kwargs):
12991271
'''
13001272
Set / unset 3D grid.

0 commit comments

Comments
 (0)