Pyplot: vertical gradient fill under curve?

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


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()