我想创建一个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,延伸箭头指向右侧,由颜色栏的最后一种颜色着色。提前感谢您提供的任何帮助
这能解决问题吗
相关问题 更多 >
编程相关推荐