渐变之间的填充

qua*_*irl 1 python matplotlib colormap

我正在尝试使用 填充图表下方的区域fill_between。我可以让它使用单一颜色(比如红色),但我无法使用颜色图在图表下获得渐变。从fill_between 文档中我了解到我应该能够使用颜色图用渐变填充该区域,但我无法使其工作。颜色图已正确加载,因为我可以从加载的颜色图中访问单独的颜色并用所述颜色填充该区域。

最小工作示例:

import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt

colourmap = mpl.cm.get_cmap('jet')
singlecolor = mpl.cm.get_cmap('jet')(500)

xx = np.arange(0,10,0.1)
yy = xx*np.exp(-xx)

plt.figure()
plt.plot(xx,yy)
plt.fill_between(xx,yy,cmap=colourmap,alpha=0.3)
# plt.fill_between(xx,yy,color=singlecolor,alpha=0.3)
plt.show()
Run Code Online (Sandbox Code Playgroud)

我没有收到任何错误消息,并且我使用的是 Python 3.8。如何使用颜色图进行填充?

Joh*_*anC 6

您可以提取填充的多边形,然后将其用作图像的剪辑多边形。设置严格的 x 和 y 限制后imshow(),您可以重新应用这些限制。用于np.linspace(0, 1, 256).reshape(-1, 1)水平渐变或...resphape(1,-1)垂直渐变。

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 200)
y1 = np.sin(x)
y2 = x * (10 - x) / 25

polygon = plt.fill_between(x, y1, y2, lw=0, color='none')
xlim = plt.xlim()
ylim = plt.ylim()
verts = np.vstack([p.vertices for p in polygon.get_paths()])
gradient = plt.imshow(np.linspace(0, 1, 256).reshape(1, -1), cmap='turbo', aspect='auto',
                      extent=[verts[:, 0].min(), verts[:, 0].max(), verts[:, 1].min(), verts[:, 1].max()])
gradient.set_clip_path(polygon.get_paths()[0], transform=plt.gca().transData)
plt.xlim(xlim)
plt.ylim(ylim)
plt.show()
Run Code Online (Sandbox Code Playgroud)

fill_ Between 带渐变