在具有离散颜色条的 contourf 图中使用 "extend" 不起作用

Use of "extend" in a contourf plot with a discrete colorbar not working

我想创建一个具有强加最大值的 contourf 图,并且高于该值的所有内容都用颜色条的最后一种颜色着色。在下面的示例代码中,它在我的设置中重现了我的问题,我希望颜色条的范围在 -1 和 1 之间,并带有一个扩展箭头,表示高于 1.0 的值将使用颜色条的最后一种颜色进行着色。然而,尽管我已经尝试了各种 stackexchange 讨论中的几种解决方案,但颜色条的范围在 -4 到 4 之间,并且没有扩展箭头。请参阅下面的最小可重现示例。

# import matplotlib (v 3.1.1)
import matplotlib.colors as colors
import matplotlib.pyplot as plt
import matplotlib.path as mpath
import matplotlib as mpl
# import numpy (v 1.17.2)
import numpy as np

# define grid
lon = np.linspace(start = 0, stop = 359, num = 360)
lat = np.linspace(start = -78, stop = -25, num = 52)
[X,Y] = np.meshgrid(lon, lat)

# generate random gaussian data for example purposes
mean = [0, 0]
cov = [[1, 0], [0, 100]] 
zz = np.random.multivariate_normal(mean, cov, (np.size(lon),np.size(lat))).T
Z = zz[0,:,:]

# illutrate the maximum value of Z
np.max(Z)

# create plot
plt.figure(figsize=(10, 12))

# select plotting levels (missing min/max on purpose)
mylevs = [-1.0, -0.5, 0, 0.5, 1.0]

# colormap
cmap_cividis = plt.cm.get_cmap('cividis',len(mylevs))
mycolors = list(cmap_cividis(np.arange(len(mylevs))))
cmap = colors.ListedColormap(mycolors[:-1], "")
# set over-color to last color of list 
cmap.set_over(mycolors[-1])

# contour plot: random pattern 
C1 = plt.contourf(X, Y, Z, cmap = cmap, vmin=-1.0, vmax=1.0, 
                  norm = colors.BoundaryNorm(mylevs, ncolors=len(mylevs)-1, clip=False))

# create colorbar
cbar = plt.colorbar(C1, orientation="horizontal", extend='max')
cbar.ax.tick_params(labelsize=20)
cbar.set_label('Random field', size='xx-large')

我希望颜色条停在 1.0,延伸箭头指向右侧,由颜色条的最后一种颜色遮蔽。在此先感谢您的帮助可以提供。

Link to example image produced by the above code

这个解决了吗?

fig,ax = plt.subplots()

mylevs = [-1.0, -0.5, 0, 0.5, 1.0]

C1 = ax.contourf(X, Y, Z, cmap = cmap, vmin=-1.0, vmax=1.0,levels=mylevs,extend='both')
fig.colorbar(C1)