[英]add white color to pylab colorbar default colormap
嗨,我有以下代码:
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图中显示为白色 。 那么无论如何要为colorbar函数添加零? 并将其与occMap联系起来
我试过看这个脚本如何在matplotlib colormap中添加“black”? 但无法让它工作?
这是一个示例图像,其中白点基本上是指x,y位置,0值或没有占用:
*****编辑****我尝试使用代码,这里是我如何添加白色到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()
对于您的问题,我建议将第一级设置为大于零,并使用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
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_over
, set_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()
将最低级别显示为0.0可能会导致一些歧义,可能将级别[0]设置为0.1看起来更好。
您可以参考以下链接了解更多信息:
https://matplotlib.org/examples/pylab_examples/image_masked.html
https://matplotlib.org/examples/pylab_examples/contourf_demo.html
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.