Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit f7dd192

Browse files
committed
Small cleanups to parasite axes.
Setting axis zorder in cla() is unnecessary since 51f8468 (zorders are now set in set_axisbelow() instead of draw()). Deprecate the peculiar `update_viewlim` API which is really just an internal helper. No need to explicitly set frameon=False, this is forced by the ParasiteAxesBase constructor. We can factor the various twin axes removers into a single one. (Also, avoiding local functions helps picklability, as usual.) In twin() we can also use viewlim_mode="transform" when the transform is None (IdentityTransform()), because that just means that we apply an additional IdentityTransform() to the viewlims. In parasite_simple2 we don't need to set viewlim_mode, this is already done by `twin`.
1 parent ae47ad2 commit f7dd192

3 files changed

Lines changed: 29 additions & 47 deletions

File tree

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
``ParasiteAxesAuxTransBase.update_viewlim``
2+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3+
... is deprecated; use ``apply_aspect`` instead.

examples/axes_grid1/parasite_simple2.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323

2424
aux_trans = mtransforms.Affine2D().scale(pm_to_kms, 1.)
2525
ax_pm = ax_kms.twin(aux_trans)
26-
ax_pm.set_viewlim_mode("transform")
2726

2827
for n, ds, dse, w, we in obs:
2928
time = ((2007 + (10. + 4/30.)/12) - 1988.5)

lib/mpl_toolkits/axes_grid1/parasite_axes.py

Lines changed: 26 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ class ParasiteAxesBase:
1313
def get_images_artists(self):
1414
artists = {a for a in self.get_children() if a.get_visible()}
1515
images = {a for a in self.images if a.get_visible()}
16-
1716
return list(images), list(artists - images)
1817

1918
def __init__(self, parent_axes, **kwargs):
@@ -23,19 +22,9 @@ def __init__(self, parent_axes, **kwargs):
2322

2423
def cla(self):
2524
super().cla()
26-
2725
martist.setp(self.get_children(), visible=False)
2826
self._get_lines = self._parent_axes._get_lines
2927

30-
# In mpl's Axes, zorders of x- and y-axis are originally set
31-
# within Axes.draw().
32-
if self._axisbelow:
33-
self.xaxis.set_zorder(0.5)
34-
self.yaxis.set_zorder(0.5)
35-
else:
36-
self.xaxis.set_zorder(2.5)
37-
self.yaxis.set_zorder(2.5)
38-
3928
def pick(self, mouseevent):
4029
# This most likely goes to Artist.pick (depending on axes_class given
4130
# to the factory), which only handles pick events registered on the
@@ -74,17 +63,12 @@ def __init__(self, parent_axes, aux_transform, viewlim_mode=None,
7463
super().__init__(parent_axes, **kwargs)
7564

7665
def _set_lim_and_transforms(self):
77-
7866
self.transAxes = self._parent_axes.transAxes
79-
80-
self.transData = \
81-
self.transAux + \
82-
self._parent_axes.transData
83-
67+
self.transData = self.transAux + self._parent_axes.transData
8468
self._xaxis_transform = mtransforms.blended_transform_factory(
85-
self.transData, self.transAxes)
69+
self.transData, self.transAxes)
8670
self._yaxis_transform = mtransforms.blended_transform_factory(
87-
self.transAxes, self.transData)
71+
self.transAxes, self.transData)
8872

8973
def set_viewlim_mode(self, mode):
9074
_api.check_in_list([None, "equal", "transform"], mode=mode)
@@ -93,7 +77,11 @@ def set_viewlim_mode(self, mode):
9377
def get_viewlim_mode(self):
9478
return self._viewlim_mode
9579

80+
@cbook.deprecated("3.4", alternative="apply_aspect")
9681
def update_viewlim(self):
82+
return self._update_viewlim()
83+
84+
def _update_viewlim(self): # Inline after deprecation elapses.
9785
viewlim = self._parent_axes.viewLim.frozen()
9886
mode = self.get_viewlim_mode()
9987
if mode is None:
@@ -107,7 +95,7 @@ def update_viewlim(self):
10795
_api.check_in_list([None, "equal", "transform"], mode=mode)
10896

10997
def apply_aspect(self, position=None):
110-
self.update_viewlim()
98+
self._update_viewlim()
11199
super().apply_aspect()
112100

113101

@@ -204,9 +192,9 @@ def twinx(self, axes_class=None):
204192

205193
parasite_axes_class = parasite_axes_class_factory(axes_class)
206194

207-
ax2 = parasite_axes_class(self, sharex=self, frameon=False)
195+
ax2 = parasite_axes_class(self, sharex=self)
208196
self.parasites.append(ax2)
209-
ax2._remove_method = self._remove_twinx
197+
ax2._remove_method = self._remove_any_twin
210198

211199
self.axis["right"].set_visible(False)
212200

@@ -215,11 +203,6 @@ def twinx(self, axes_class=None):
215203

216204
return ax2
217205

218-
def _remove_twinx(self, ax):
219-
self.parasites.remove(ax)
220-
self.axis["right"].set_visible(True)
221-
self.axis["right"].toggle(ticklabels=False, label=False)
222-
223206
def twiny(self, axes_class=None):
224207
"""
225208
Create a twin of Axes with a shared y-axis but independent x-axis.
@@ -232,9 +215,9 @@ def twiny(self, axes_class=None):
232215

233216
parasite_axes_class = parasite_axes_class_factory(axes_class)
234217

235-
ax2 = parasite_axes_class(self, sharey=self, frameon=False)
218+
ax2 = parasite_axes_class(self, sharey=self)
236219
self.parasites.append(ax2)
237-
ax2._remove_method = self._remove_twiny
220+
ax2._remove_method = self._remove_any_twin
238221

239222
self.axis["top"].set_visible(False)
240223

@@ -243,11 +226,6 @@ def twiny(self, axes_class=None):
243226

244227
return ax2
245228

246-
def _remove_twiny(self, ax):
247-
self.parasites.remove(ax)
248-
self.axis["top"].set_visible(True)
249-
self.axis["top"].toggle(ticklabels=False, label=False)
250-
251229
def twin(self, aux_trans=None, axes_class=None):
252230
"""
253231
Create a twin of Axes with no shared axis.
@@ -262,27 +240,29 @@ def twin(self, aux_trans=None, axes_class=None):
262240
parasite_axes_auxtrans_class_factory(axes_class)
263241

264242
if aux_trans is None:
265-
ax2 = parasite_axes_auxtrans_class(
266-
self, mtransforms.IdentityTransform(), viewlim_mode="equal")
267-
else:
268-
ax2 = parasite_axes_auxtrans_class(
269-
self, aux_trans, viewlim_mode="transform")
243+
aux_trans = mtransforms.IdentityTransform()
244+
ax2 = parasite_axes_auxtrans_class(
245+
self, aux_trans, viewlim_mode="transform")
270246
self.parasites.append(ax2)
271-
ax2._remove_method = self.parasites.remove
247+
ax2._remove_method = self._remove_any_twin
272248

273249
self.axis["top", "right"].set_visible(False)
274250

275251
ax2.axis["top", "right"].set_visible(True)
276252
ax2.axis["left", "bottom"].set_visible(False)
277253

278-
def _remove_method(h):
279-
self.parasites.remove(h)
280-
self.axis["top", "right"].set_visible(True)
281-
self.axis["top", "right"].toggle(ticklabels=False, label=False)
282-
ax2._remove_method = _remove_method
283-
284254
return ax2
285255

256+
def _remove_any_twin(self, ax):
257+
self.parasites.remove(ax)
258+
restore = ["top", "right"]
259+
if ax._sharex:
260+
restore.remove("top")
261+
if ax._sharey:
262+
restore.remove("right")
263+
self.axis[tuple(restore)].set_visible(True)
264+
self.axis[tuple(restore)].toggle(ticklabels=False, label=False)
265+
286266
def get_tightbbox(self, renderer, call_axes_locator=True,
287267
bbox_extra_artists=None):
288268
bbs = [

0 commit comments

Comments
 (0)