将白色添加到pylab colorbar默认色彩映射

时间:2016-10-07 12:28:57

标签: python matplotlib colorbar

您好我有以下代码:

rateMap, occMap, spikeMap = pickle.load(open(rateMapFileName))

pl.imshow(rateMap)
pl.colorbar()

现在,occMap是包含多个时间戳的x,y位置的占用地图。存在一些没有占用的点x,y位置(即,在该矩阵值处= 0值)

当我使用上面的脚本绘制rateMap(这是= spikeMap / occMap)时。生成的颜色条使用默认的 jetmap 色彩映射。我希望 occMap 中的null / 0值在rateMap图中显示为 white 。那么无论如何要为colorbar函数添加零?并将其与occMap相关联

我尝试查看此脚本How to add "black" to matplotlib colormap?但是无法使其运行?

这是一个示例图像,其中白点基本上是指x,y位置为0值或没有占用:

enter image description here

***** **** EDIT 我尝试使用代码,这里是我如何为colormap添加白色但我想将此白色添加到默认的喷射色彩映射。有什么建议??

cmap = LinearSegmentedColormap.from_list('mycmap', ['white', 'blue', 'cyan', 'green', 'yellow','red'])
fig, ax = plt.subplots()
im = ax.imshow(im, cmap=cmap, interpolation='nearest')
fig.colorbar(im)
plt.show()

1 个答案:

答案 0 :(得分:0)

对于您的问题,我建议将第一级设置为大于零,并使用颜色栏的扩展功能指定零个x,y位置。

首先,我们导入库,并尝试在稀疏网格上根据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

Z = np.where(Z > 0, Z, 0)

现在到了关键点!只需在颜色表中添加超出范围的颜色即可。

palette = copy(plt.get_cmap('viridis_r'))
palette.set_under('white', 1.0)  # 1.0 represents not transparent

您还可以使用set_overset_bad方法为超范围数据和未定义(NaN)数据设置颜色。

设置子图:

fig, ax = plt.subplots(1, 1)

设置图的级别,但切记将最低级别修改为接近零的正数。

levels = np.arange(0, 3.5, 0.5)
levels[0] = 1e-5

这里是绘制数组Z的方法。

norm = 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()

draw.png

将最低级别显示为0.0可能会引起歧义,也许将level [0]设置为0.1看起来更好。

您可以参考以下链接以获得更多信息:

https://matplotlib.org/examples/pylab_examples/image_masked.html

https://matplotlib.org/examples/pylab_examples/contourf_demo.html