如何使用colormap为matplotlib的fill_between填充区域设置渐变效果
问题原因
fill_between的cmap参数无法直接生效,是因为你没有指定用于颜色映射的数值序列,该参数仅当你传入可映射的数值维度时才会被调用,原生不支持直接对填充区域做x/y维度的渐变映射。
可行实现方案
这里推荐用imshow生成渐变图层+路径裁剪的方案,代码改动量小,效果稳定:
import numpy as np import matplotlib as mpl import matplotlib.pyplot as plt from matplotlib.patches import Polygon colourmap = mpl.cm.get_cmap('jet') xx = np.arange(0,10,0.1) yy = xx*np.exp(-xx) fig, ax = plt.subplots() ax.plot(xx,yy) # 先获取填充区域的路径 fill_poly = ax.fill_between(xx, yy, alpha=0.3) verts = fill_poly.get_paths()[0].vertices clip_poly = Polygon(verts, transform=ax.transData) # 生成渐变图层,此处为横向渐变,可自行调整渐变方向、映射规则 grad = np.linspace(0, 1, 256).reshape(1, -1) img = ax.imshow(grad, extent=[xx.min(), xx.max(), yy.min(), yy.max()], cmap=colourmap, aspect='auto', alpha=0.3) # 把渐变图层裁剪到填充区域范围内 img.set_clip_path(clip_poly) plt.show()
如果需要渐变和y值绑定,只需要把imshow的渐变数组修改为对应y值的映射序列即可。
内容的提问来源于stack exchange,提问作者quantum girl
相关产品推荐
相关产品推荐

