python contourf色阶_python – pyplot.contourf如何从色彩图中选择颜色?

我一直在使用from_levels_and_colors函数,因此我可以在pcolormesh图上使用扩展颜色条,类似于contourf.这是我的示例contourf plot:

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

为了产生类似的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中的中间四种颜色比contourf中的颜色浅.我如何选择它们才能匹配?

解决方法:

问题是,contourf图的颜色是从相应间隔的中间获取的.要为pcolor绘图复制相同的行为,您需要选择颜色不仅仅是与colormap(colors = cmap(range(cmap.N)))的间距相等,而是作为地图的两个端点和相应的意味着水平边界之间.

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

为了更好地理解解决方案,您可能希望替换行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,matplotlib

你可能感兴趣的:(python,contourf色阶)