Skip to content

Commit ce41543

Browse files
committed
axisbelow should just set zorder.
1 parent df6acf9 commit ce41543

File tree

3 files changed

+33
-70
lines changed

3 files changed

+33
-70
lines changed

lib/matplotlib/axes/_base.py

Lines changed: 22 additions & 30 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.set_aspect('auto')
493492
self._adjustable = 'box'
@@ -498,15 +497,11 @@ def __init__(self, fig, rect,
498497
self._shared_x_axes.join(self, sharex)
499498
if sharex._adjustable == 'box':
500499
sharex._adjustable = 'datalim'
501-
# warnings.warn(
502-
# 'shared axes: "adjustable" is being changed to "datalim"')
503500
self._adjustable = 'datalim'
504501
if sharey is not None:
505502
self._shared_y_axes.join(self, sharey)
506503
if sharey._adjustable == 'box':
507504
sharey._adjustable = 'datalim'
508-
# warnings.warn(
509-
# 'shared axes: "adjustable" is being changed to "datalim"')
510505
self._adjustable = 'datalim'
511506
self.set_label(label)
512507
self.set_figure(fig)
@@ -529,7 +524,7 @@ def __init__(self, fig, rect,
529524
facecolor = rcParams['axes.facecolor']
530525
self._facecolor = facecolor
531526
self._frameon = frameon
532-
self._axisbelow = rcParams['axes.axisbelow']
527+
self.set_axisbelow(rcParams['axes.axisbelow'])
533528

534529
self._rasterization_zorder = None
535530

@@ -2341,18 +2336,7 @@ def draw(self, renderer=None, inframe=False):
23412336
for spine in six.itervalues(self.spines):
23422337
artists.remove(spine)
23432338

2344-
if self.axison and not inframe:
2345-
if self._axisbelow is True:
2346-
self.xaxis.set_zorder(0.5)
2347-
self.yaxis.set_zorder(0.5)
2348-
elif self._axisbelow is False:
2349-
self.xaxis.set_zorder(2.5)
2350-
self.yaxis.set_zorder(2.5)
2351-
else:
2352-
# 'line': above patches, below lines
2353-
self.xaxis.set_zorder(1.5)
2354-
self.yaxis.set_zorder(1.5)
2355-
else:
2339+
if not self.axison or inframe:
23562340
for _axis in self._get_axis_list():
23572341
artists.remove(_axis)
23582342

@@ -2425,34 +2409,40 @@ def get_renderer_cache(self):
24252409
# Axes rectangle characteristics
24262410

24272411
def get_frame_on(self):
2428-
"""
2429-
Get whether the axes rectangle patch is drawn
2430-
"""
2412+
"""Get whether the axes rectangle patch is drawn."""
24312413
return self._frameon
24322414

24332415
def set_frame_on(self, b):
2434-
"""
2435-
Set whether the axes rectangle patch is drawn
2416+
"""Set whether the axes rectangle patch is drawn.
24362417
24372418
ACCEPTS: [ *True* | *False* ]
24382419
"""
24392420
self._frameon = b
24402421
self.stale = True
24412422

24422423
def get_axisbelow(self):
2443-
"""
2444-
Get whether axis below is true or not
2445-
"""
2424+
"""Get whether axis below is true or not."""
24462425
return self._axisbelow
24472426

24482427
def set_axisbelow(self, b):
2449-
"""
2450-
Set whether the axis ticks and gridlines are above or below most
2451-
artists
2428+
"""Set the zorder for the axes ticks and gridlines.
2429+
2430+
``True`` corresponds to a zorder of 0.5, ``False`` to a zorder of 2.5,
2431+
and ``"line"`` to a zorder of 1.5.
24522432
24532433
ACCEPTS: [ *True* | *False* | 'line' ]
24542434
"""
2455-
self._axisbelow = validate_axisbelow(b)
2435+
self._axisbelow = axisbelow = validate_axisbelow(b)
2436+
if axisbelow is True:
2437+
zorder = 0.5
2438+
elif axisbelow is False:
2439+
zorder = 2.5
2440+
elif axisbelow == "line":
2441+
zorder = 1.5
2442+
else:
2443+
raise ValueError("Unexpected axisbelow value")
2444+
for axis in self._get_axis_list():
2445+
axis.set_zorder(self.get_zorder())
24562446
self.stale = True
24572447

24582448
@docstring.dedent_interpd
@@ -2481,6 +2471,8 @@ def grid(self, b=None, which='major', axis='both', **kwargs):
24812471
24822472
%(Line2D)s
24832473
2474+
Note that the grid will be drawn according to the axes' zorder and not
2475+
its own.
24842476
"""
24852477
if len(kwargs):
24862478
b = True

lib/matplotlib/tests/test_image.py

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

743-
# data = np.random.random((N, N))*N*N
744743
data = np.arange(N*N, dtype='float').reshape(N, N)
745744

746745
data[5, 5] = -1

lib/mpl_toolkits/mplot3d/axes3d.py

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

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

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

290289
if self._axis3don:
291-
axes = (self.xaxis, self.yaxis, self.zaxis)
292290
# Draw panes first
293-
for ax in axes:
294-
ax.draw_pane(renderer)
291+
for axis in self._get_axis_list():
292+
axis.draw_pane(renderer)
295293
# Then axes
296-
for ax in axes:
297-
ax.draw(renderer)
294+
for axis in self._get_axis_list():
295+
axis.draw(renderer)
298296

299297
# Then rest
300298
super(Axes3D, self).draw(renderer)
@@ -1258,32 +1256,6 @@ def set_frame_on(self, b):
12581256
self._frameon = bool(b)
12591257
self.stale = True
12601258

1261-
def get_axisbelow(self):
1262-
"""
1263-
Get whether axis below is true or not.
1264-
1265-
For axes3d objects, this will always be *True*
1266-
1267-
.. versionadded :: 1.1.0
1268-
This function was added for completeness.
1269-
"""
1270-
return True
1271-
1272-
def set_axisbelow(self, b):
1273-
"""
1274-
Set whether the axis ticks and gridlines are above or below
1275-
most artists
1276-
1277-
For axes3d objects, this will ignore any settings and just use *True*
1278-
1279-
ACCEPTS: [ *True* | *False* ]
1280-
1281-
.. versionadded :: 1.1.0
1282-
This function was added for completeness.
1283-
"""
1284-
self._axisbelow = True
1285-
self.stale = True
1286-
12871259
def grid(self, b=True, **kwargs):
12881260
'''
12891261
Set / unset 3D grid.

0 commit comments

Comments
 (0)