在离散色条不工作的轮廓图中使用“延伸”

2024-05-19 03:38:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我想创建一个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


Tags: importsizematplotlib颜色asnppltrandom
1条回答
网友
1楼 · 发布于 2024-05-19 03:38:01

这能解决问题吗

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)

enter image description here

相关问题 更多 >

    热门问题