对于您的问题,我建议将第一个级别设置为大于零,并使用colorbar的扩展功能来指定零x,y位置。在
首先,我们导入libs并尝试从稀疏网格上numpy的正态分布函数生成一些随机数据。在from copy import copy
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.colors as colors
# generate sample data
x0, x1 = -5, 5
y0, y1 = -3, 3
x = np.linspace(x0, x1, 60)
y = np.linspace(y0, y1, 60)
X, Y = np.meshgrid(x, y)
Z = np.random.randn(60, 60)
为了说明您的问题,我们将所有负值设置为零,呈现非负网格数据Z。在
^{pr2}$
现在到关键点了!只需将超出范围的颜色添加到颜色贴图中。在palette = copy(plt.get_cmap('viridis_r'))
palette.set_under('white', 1.0) # 1.0 represents not transparent
您还可以使用set_over,set_bad方法为超范围数据和未定义(NaN)数据设置颜色。在
设置子批次:fig, ax = plt.subplots(1, 1)
设置绘图级别,但请记住将最低级别修改为接近零的正数。在levels = np.arange(0, 3.5, 0.5)
levels[0] = 1e-5
下面是如何绘制数组Znorm = colors.BoundaryNorm(levels, ncolors=palette.N)
im = ax.imshow(Z, cmap=palette,
norm=norm,
aspect='auto', extent=[x0, x1, y0, y1])
# Possible extend options include: ['min', 'max', 'both', 'neither']
cbar = fig.colorbar(im, extend='min', shrink=0.9, ax=ax)
plt.savefig('draw.png', dpi=300)
# or
# plt.show()
将最低级别显示为0.0可能会导致一些歧义,也许将levels[0]设置为0.1更适合您。在
您可以参考以下链接了解更多信息: