首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Pyplot - fill_between梯度

Pyplot - fill_between梯度
EN

Stack Overflow用户
提问于 2021-06-16 20:35:32
回答 2查看 175关注 0票数 0

我正在尝试使用fill_between填充我的图形下的一个区域。我可以让它在单一颜色(比如红色)下工作,但我不能使用颜色映射在图形下获得渐变。从fill_between documentation中,我了解到我应该能够使用颜色映射用渐变填充区域,但我不能让它工作。色彩映射表被正确加载,因为我可以从加载的色彩映射表中访问不同的颜色,并用所述颜色填充区域。

最小工作示例:

代码语言:javascript
运行
复制
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()

我没有收到错误消息,而且我使用的是Python 3.8。如何使用色彩映射表进行填充?

EN

回答 2

Stack Overflow用户

发布于 2021-06-16 21:14:20

你可以使用下面的代码,它将填充100倍的小梯形,以便用整个色彩映射调色板填充曲线下的区域。

代码语言:javascript
运行
复制
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt

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

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

plt.plot(xx,yy)
normalize = mpl.colors.Normalize(vmin=yy.min(), vmax=yy.max())
npts = 100
for i in range(npts - 1):
    plt.fill_between([xx[i], xx[i+1]],
                     [yy[i], yy[i+1]],
                     color=colourmap(normalize(yy[i]))
                     ,alpha=0.6)
plt.show()

这将产生以下图形:

票数 0
EN

Stack Overflow用户

发布于 2021-06-16 21:53:10

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

代码语言:javascript
运行
复制
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()

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68002782

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档