Pyplot: vertical gradient fill under curve?

前端 未结 2 1070
礼貌的吻别
礼貌的吻别 2020-11-28 15:40

I\'m wondering if there\'s a way to fill under a pyplot curve with a vertical gradient, like in this quick mockup:

\

相关标签:
2条回答
  • 2020-11-28 16:14

    There may be a better way, but here goes:

    from matplotlib import pyplot as plt
    
    x = range(10)
    y = range(10)
    z = [[z] * 10 for z in range(10)]
    num_bars = 100  # more bars = smoother gradient
    
    plt.contourf(x, y, z, num_bars)
    
    background_color = 'w'
    plt.fill_between(x, y, y2=max(y), color=background_color)
    
    plt.show()
    

    Shows:

    enter image description here

    0 讨论(0)
  • 2020-11-28 16:25

    There is an alternative solution closer to the sketch in the question. It's given on Henry Barthes' blog http://pradhanphy.blogspot.com/2014/06/filling-between-curves-with-color.html. This applies an imshow to each of the patches, I've copied the code in case the link changes,

    import numpy as np
    import matplotlib.pyplot as plt
    from matplotlib.path import Path
    from matplotlib.patches import PathPatch
    
    xx=np.arange(0,10,0.01)
    yy=xx*np.exp(-xx)
    
    path = Path(np.array([xx,yy]).transpose())
    patch = PathPatch(path, facecolor='none')
    plt.gca().add_patch(patch)
    
    im = plt.imshow(xx.reshape(yy.size,1),   
                    cmap=plt.cm.Reds,
                    interpolation="bicubic",
                    origin='lower',
                    extent=[0,10,-0.0,0.40],
                    aspect="auto",
                    clip_path=patch, 
                    clip_on=True)
    plt.show()
    
    0 讨论(0)
提交回复
热议问题