8000 Add force_zorder parameter · matplotlib/matplotlib@7596db7 · GitHub
[go: up one dir, main page]

Skip to content

Commit 7596db7

Browse files
KentKent
authored andcommitted
Add force_zorder parameter
1 parent a510e32 commit 7596db7

File tree

1 file changed

+28
-15
lines changed

1 file changed

+28
-15
lines changed

lib/mpl_toolkits/mplot3d/axes3d.py

Lines changed: 28 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ class Axes3D(Axes):
4949
def __init__(
5050
self, fig, rect=None, *args,
5151
azim=-60, elev=30, sharez=None, proj_type='persp',
52-
box_aspect=None,
52+
box_aspect=None, force_zorder=False,
5353
**kwargs):
5454
"""
5555
Parameters
@@ -66,6 +66,10 @@ def __init__(
6666
Other axes to share z-limits with.
6767
proj_type : {'persp', 'ortho'}
6868
The projection type, default 'persp'.
69+
force_zorder : bool, optional
70+
Force use of each collection and patch's zorder to determine
71+
draw order. If this option is True, automatic draw order is
72+
completely disabled. Defaults to False.
6973
auto_add_to_figure : bool, default: True
7074
Prior to Matplotlib 3.4 Axes3D would add themselves
7175
to their host Figure on init. Other Axes class do not
@@ -84,6 +88,8 @@ def __init__(
8488
-----
8589
.. versionadded:: 1.2.1
8690
The *sharez* parameter.
91+
.. versionadded:: TBD
92+
The *force_zorder* parameter.
8793
"""
8894

8995
if rect is None:
@@ -92,6 +98,7 @@ def __init__(
9298
self.initial_azim = azim
9399
self.initial_elev = elev
94100
self.set_proj_type(proj_type)
101+
self.force_zorder = force_zorder
95102

96103
self.xy_viewLim = Bbox.unit()
97104
self.zz_viewLim = Bbox.unit()
@@ -477,20 +484,26 @@ def do_3d_projection(artist):
477484
"%(since)s and will be removed %(removal)s.")
478485
return artist.do_3d_projection(renderer)
479486

480-
# Calculate projection of collections and patches and zorder them.
481-
# Make sure they are drawn above the grids.
482-
zorder_offset = max(axis.get_zorder()
483-
for axis in self._get_axis_list()) + 1
484-
for i, col in enumerate(
485-
sorted(self.collections,
486-
key=do_3d_projection,
487-
reverse=True)):
488-
col.zorder = zorder_offset + i
489-
for i, patch in enumerate(
490-
sorted(self.patches,
491-
key=do_3d_projection,
492-
reverse=True)):
493-
patch.zorder = zorder_offset + i
487+
if self.force_zorder:
488+
for col in self.collections:
489+
col.do_3d_projection()
490+
for patch in self.patches:
491+
patch.do_3d_projection()
492+
else:
493+
# Calculate projection of collections and patches and zorder them.
494+
# Make sure they are drawn above the grids.
495+
zorder_offset = max(axis.get_zorder()
496+
for axis in self._get_axis_list()) + 1
497+
for i, col in enumerate(
498+
sorted(self.collections,
499+
key=do_3d_projection,
500+
reverse=True)):
501+
col.zorder = zorder_offset + i
502+
for i, patch in enumerate(
503+
sorted(self.patches,
504+
key=do_3d_projection,
505+
reverse=True)):
506+
patch.zorder = zorder_offset + i
494507

495508
if self._axis3don:
496509
# Draw panes first

0 commit comments

Comments
 (0)
0