python colorbar 0变白色_将白色添加到pylab colorbar默认颜色贴图

对于您的问题,我建议将第一个级别设置为大于零,并使用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更适合您。在

您可以参考以下链接了解更多信息: