gpt4 book ai didi

python - pyplot.contourf 如何从颜色图中选择颜色?

转载 作者:太空宇宙 更新时间:2023-11-03 14:38:02 43 4
gpt4 key购买 nike

我一直在使用from_levels_and_colors函数,这样我就可以在pcolormesh图上有一个扩展的颜色条,类似于contourf。这是我的轮廓图示例:

import numpy as np
import matplotlib.pyplot as plt

a = np.arange(12)[:,np.newaxis] * np.ones(8)
levels = np.arange(1.5, 10, 2)

plt.contourf(a, cmap='RdYlBu', levels=levels, extend='both')
plt.colorbar()

contouf example

为了生成类似的 pcolormesh 图,我需要提供一系列颜色,所以我有:

from matplotlib.colors import from_levels_and_colors

n_colors = len(levels) + 1
cmap = plt.get_cmap('RdYlBu', n_colors)
colors = cmap(range(cmap.N))
cmap, norm = from_levels_and_colors(levels, colors, extend='both')
plt.pcolormesh(a, cmap=cmap, norm=norm)
plt.colorbar()

pcolormesh example

pcolormesh 中的中间四种颜色比contourf 中的颜色浅。我该如何选择它们以使它们匹配?

最佳答案

问题是 contourf 图的颜色是从相应区间的中间获取的。要为 pcolor 图复制相同的行为,您需要从颜色图中选择不只是等间距范围的颜色 (colors = cmap(range(cmap.N))),而是作为 map 的两个端点以及各自的水平边界之间的手段。

cnorm = plt.Normalize(vmin=levels[0],vmax=levels[-1])
clevels = [levels[0]] + list(0.5*(levels[1:]+levels[:-1])) + [levels[-1]]
colors=plt.cm.RdYlBu(cnorm(clevels))

完整代码:

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

a = np.arange(12)[:,np.newaxis] * np.ones(8)
levels = np.arange(1.5, 10, 2)

fig, (ax,ax2) = plt.subplots(ncols=2)

ax.set_title("contourf")
cf = ax.contourf(a, levels=levels, cmap='RdYlBu', extend='both') #,
fig.colorbar(cf, ax=ax)

##### pcolormesh

cnorm = plt.Normalize(vmin=levels[0],vmax=levels[-1])
clevels = [levels[0]] + list(0.5*(levels[1:]+levels[:-1])) + [levels[-1]]
colors=plt.cm.RdYlBu(cnorm(clevels))

cmap, norm = matplotlib.colors.from_levels_and_colors(levels, colors, extend='both')
cf = ax2.pcolormesh(a, cmap=cmap, norm=norm)
ax2.set_title("pcolormesh")
fig.colorbar(cf,ax=ax2)


plt.tight_layout()
plt.show()

enter image description here

为了更好地理解该解决方案,您可能需要将行 cmap,norm = matplotlib.colors.from_levels_and_colors(levels,colors,extend='both') 替换为

norm=matplotlib.colors.BoundaryNorm(levels, ncolors=len(levels)-1)

cmap = matplotlib.colors.ListedColormap(colors[1:-1], N=len(levels)-1)
cmap.set_under(colors[0])
cmap.set_over(colors[-1])
cmap.colorbar_extend = "both"

这可能会更清楚地表明最终使用的颜色和颜色图的来源。

关于python - pyplot.contourf 如何从颜色图中选择颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46768028/

43 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com