.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "gallery/subplots_axes_and_figures/axes_zoom_effect.py" .. LINE NUMBERS ARE GIVEN BELOW. .. only:: html .. meta:: :keywords: codex .. note:: :class: sphx-glr-download-link-note :ref:`Go to the end ` to download the full example code .. rst-class:: sphx-glr-example-title .. _sphx_glr_gallery_subplots_axes_and_figures_axes_zoom_effect.py: ================ Axes Zoom Effect ================ .. GENERATED FROM PYTHON SOURCE LINES 7-123 .. image-sg:: /gallery/subplots_axes_and_figures/images/sphx_glr_axes_zoom_effect_001.png :alt: axes zoom effect :srcset: /gallery/subplots_axes_and_figures/images/sphx_glr_axes_zoom_effect_001.png, /gallery/subplots_axes_and_figures/images/sphx_glr_axes_zoom_effect_001_2_00x.png 2.00x :class: sphx-glr-single-img .. code-block:: Python import matplotlib.pyplot as plt from matplotlib.transforms import (Bbox, TransformedBbox, blended_transform_factory) from mpl_toolkits.axes_grid1.inset_locator import (BboxConnector, BboxConnectorPatch, BboxPatch) def connect_bbox(bbox1, bbox2, loc1a, loc2a, loc1b, loc2b, prop_lines, prop_patches=None): if prop_patches is None: prop_patches = { **prop_lines, "alpha": prop_lines.get("alpha", 1) * 0.2, "clip_on": False, } c1 = BboxConnector( bbox1, bbox2, loc1=loc1a, loc2=loc2a, clip_on=False, **prop_lines) c2 = BboxConnector( bbox1, bbox2, loc1=loc1b, loc2=loc2b, clip_on=False, **prop_lines) bbox_patch1 = BboxPatch(bbox1, **prop_patches) bbox_patch2 = BboxPatch(bbox2, **prop_patches) p = BboxConnectorPatch(bbox1, bbox2, loc1a=loc1a, loc2a=loc2a, loc1b=loc1b, loc2b=loc2b, clip_on=False, **prop_patches) return c1, c2, bbox_patch1, bbox_patch2, p def zoom_effect01(ax1, ax2, xmin, xmax, **kwargs): """ Connect *ax1* and *ax2*. The *xmin*-to-*xmax* range in both axes will be marked. Parameters ---------- ax1 The main axes. ax2 The zoomed axes. xmin, xmax The limits of the colored area in both plot axes. **kwargs Arguments passed to the patch constructor. """ bbox = Bbox.from_extents(xmin, 0, xmax, 1) mybbox1 = TransformedBbox(bbox, ax1.get_xaxis_transform()) mybbox2 = TransformedBbox(bbox, ax2.get_xaxis_transform()) prop_patches = {**kwargs, "ec": "none", "alpha": 0.2} c1, c2, bbox_patch1, bbox_patch2, p = connect_bbox( mybbox1, mybbox2, loc1a=3, loc2a=2, loc1b=4, loc2b=1, prop_lines=kwargs, prop_patches=prop_patches) ax1.add_patch(bbox_patch1) ax2.add_patch(bbox_patch2) ax2.add_patch(c1) ax2.add_patch(c2) ax2.add_patch(p) return c1, c2, bbox_patch1, bbox_patch2, p def zoom_effect02(ax1, ax2, **kwargs): """ ax1 : the main axes ax1 : the zoomed axes Similar to zoom_effect01. The xmin & xmax will be taken from the ax1.viewLim. """ tt = ax1.transScale + (ax1.transLimits + ax2.transAxes) trans = blended_transform_factory(ax2.transData, tt) mybbox1 = ax1.bbox mybbox2 = TransformedBbox(ax1.viewLim, trans) prop_patches = {**kwargs, "ec": "none", "alpha": 0.2} c1, c2, bbox_patch1, bbox_patch2, p = connect_bbox( mybbox1, mybbox2, loc1a=3, loc2a=2, loc1b=4, loc2b=1, prop_lines=kwargs, prop_patches=prop_patches) ax1.add_patch(bbox_patch1) ax2.add_patch(bbox_patch2) ax2.add_patch(c1) ax2.add_patch(c2) ax2.add_patch(p) return c1, c2, bbox_patch1, bbox_patch2, p axs = plt.figure().subplot_mosaic([ ["zoom1", "zoom2"], ["main", "main"], ]) axs["main"].set(xlim=(0, 5)) zoom_effect01(axs["zoom1"], axs["main"], 0.2, 0.8) axs["zoom2"].set(xlim=(2, 3)) zoom_effect02(axs["zoom2"], axs["main"]) plt.show() .. _sphx_glr_download_gallery_subplots_axes_and_figures_axes_zoom_effect.py: .. only:: html .. container:: sphx-glr-footer sphx-glr-footer-example .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: axes_zoom_effect.ipynb ` .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: axes_zoom_effect.py ` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_