draw a border around subplots in matplotlib

前端 未结 2 1179
陌清茗
陌清茗 2020-12-30 04:17

Anyone know how to draw a border around an individual subplot within a figure in matplotlib? I\'m using pyplot.

eg:

import matplotlib.pyplot as plt
         


        
相关标签:
2条回答
  • 2020-12-30 04:47

    You essentially want to draw outside of the axes, right?

    I adapted this from here. It would need clean up as I used some hard-coded "fudge-factors" in there.

    #!/usr/bin/env python
    from pylab import *
    
    def f(t):
        s1 = cos(2*pi*t)
        e1 = exp(-t)
        return multiply(s1,e1)
    
    t1 = arange(0.0, 5.0, 0.1)
    t2 = arange(0.0, 5.0, 0.02)
    t3 = arange(0.0, 2.0, 0.01)
    
    figure(figsize=(4, 4))
    sub1 = subplot(211)
    l = plot(t1, f(t1), 'bo', t2, f(t2), 'k--', markerfacecolor='green')
    grid(True)
    title('A tale of 2 subplots')
    ylabel('Damped oscillation')
    
    ## I ADDED THIS
    autoAxis = sub1.axis()
    rec = Rectangle((autoAxis[0]-0.7,autoAxis[2]-0.2),(autoAxis[1]-autoAxis[0])+1,(autoAxis[3]-autoAxis[2])+0.4,fill=False,lw=2)
    rec = sub1.add_patch(rec)
    rec.set_clip_on(False)
    
    subplot(212)
    plot(t3, cos(2*pi*t3), 'r.')
    grid(True)
    xlabel('time (s)')
    ylabel('Undamped')
    
    savefig('test.png')
    

    Produces:

    enter image description here

    0 讨论(0)
  • 2020-12-30 04:58

    An alternative solution is derived from this answer on SO regarding placing Rectangle patches directly to the figure canvas, rather than to individual axes:

    import matplotlib.pyplot as plt
    import numpy as np
    
    fig, axes = plt.subplots(nrows=2, ncols=1)
    axes[0].plot(np.cumsum(np.random.randn(100)))
    axes[1].plot(np.cumsum(np.random.randn(100)))
    
    rect = plt.Rectangle(
        # (lower-left corner), width, height
        (0.02, 0.5), 0.97, 0.49, fill=False, color="k", lw=2, 
        zorder=1000, transform=fig.transFigure, figure=fig
    )
    fig.patches.extend([rect])
    
    plt.tight_layout()
    plt.show()
    

    Result:

    0 讨论(0)
提交回复
热议问题