将白色添加到pylab colorbar默认颜色贴图

2024-10-03 11:16:13 发布

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

嗨,我有以下代码:

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

pl.imshow(rateMap)
pl.colorbar()

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

当我使用上面的脚本绘制rateMap(即=spikeMap/occMap)时。生成的colorbar使用默认的jetmapcolormap。我希望occMap中的null/0值在rateMap图中显示为白色。所以不管怎样给colorbar函数加零?并将其与occMap相关联

我试着看这个脚本How to add "black" to matplotlib colormap?,但没能让它起作用?在

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

enter image description here

******编辑**** 我试着用这个代码,这里是我如何将白色添加到colormap中的,但是我想把这个白色添加到默认的jet colormap中。有什么建议吗??在

^{pr2}$

Tags: to代码脚本loadopenpickleplimshow
1条回答
网友
1楼 · 发布于 2024-10-03 11:16:13

对于您的问题,我建议将第一个级别设置为大于零,并使用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_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可能会导致一些歧义,也许将levels[0]设置为0.1更适合您。在

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

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

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

相关问题 更多 >