Sophie

Sophie

distrib > Mandriva > 2010.2 > i586 > media > contrib-backports > by-pkgid > a44f8c7e78ee9c5838c1fb080c9e7630 > files > 1242

python-matplotlib-doc-1.1.1-1mdv2010.1.noarch.rpm

.. _pylab_examples-axes_zoom_effect:

pylab_examples example code: axes_zoom_effect.py
================================================



.. plot:: /home/mandrake/rpm/BUILD/matplotlib-1.1.1/doc/mpl_examples/pylab_examples/axes_zoom_effect.py

::

    from matplotlib.transforms import Bbox, TransformedBbox, \
         blended_transform_factory
    
    from mpl_toolkits.axes_grid1.inset_locator import BboxPatch, BboxConnector,\
         BboxConnectorPatch
    
    
    def connect_bbox(bbox1, bbox2,
                     loc1a, loc2a, loc1b, loc2b,
                     prop_lines, prop_patches=None):
        if prop_patches is None:
            prop_patches = prop_lines.copy()
            prop_patches["alpha"] = prop_patches.get("alpha", 1)*0.2
    
        c1 = BboxConnector(bbox1, bbox2, loc1=loc1a, loc2=loc2a, **prop_lines)
        c1.set_clip_on(False)
        c2 = BboxConnector(bbox1, bbox2, loc1=loc1b, loc2=loc2b, **prop_lines)
        c2.set_clip_on(False)
    
        bbox_patch1 = BboxPatch(bbox1, **prop_patches)
        bbox_patch2 = BboxPatch(bbox2, **prop_patches)
    
        p = BboxConnectorPatch(bbox1, bbox2,
                               #loc1a=3, loc2a=2, loc1b=4, loc2b=1,
                               loc1a=loc1a, loc2a=loc2a, loc1b=loc1b, loc2b=loc2b,
                               **prop_patches)
        p.set_clip_on(False)
    
        return c1, c2, bbox_patch1, bbox_patch2, p
    
    
    def zoom_effect01(ax1, ax2, xmin, xmax, **kwargs):
        u"""
        ax1 : the main axes
        ax1 : the zoomed axes
        (xmin,xmax) : the limits of the colored area in both plot axes.
    
        connect ax1 & ax2. The x-range of (xmin, xmax) in both axes will
        be marked.  The keywords parameters will be used ti create
        patches.
    
        """
    
        trans1 = blended_transform_factory(ax1.transData, ax1.transAxes)
        trans2 = blended_transform_factory(ax2.transData, ax2.transAxes)
    
        bbox = Bbox.from_extents(xmin, 0, xmax, 1)
    
        mybbox1 = TransformedBbox(bbox, trans1)
        mybbox2 = TransformedBbox(bbox, trans2)
    
        prop_patches=kwargs.copy()
        prop_patches["ec"]="none"
        prop_patches["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):
        u"""
        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.copy()
        prop_patches["ec"]="none"
        prop_patches["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
    
    
    import matplotlib.pyplot as plt
    
    plt.figure(1, figsize=(5,5))
    ax1 = plt.subplot(221)
    ax2 = plt.subplot(212)
    ax2.set_xlim(0, 1)
    ax2.set_xlim(0, 5)
    zoom_effect01(ax1, ax2, 0.2, 0.8)
    
    
    ax1 = plt.subplot(222)
    ax1.set_xlim(2, 3)
    ax2.set_xlim(0, 5)
    zoom_effect02(ax1, ax2)
    
    plt.show()
    

Keywords: python, matplotlib, pylab, example, codex (see :ref:`how-to-search-examples`)