Python颜色图,但所有零值都映射为黑色
Posted
技术标签:
【中文标题】Python颜色图,但所有零值都映射为黑色【英文标题】:Python color map but with all zero values mapped to black 【发布时间】:2014-04-28 05:35:54 【问题描述】:我有一个与格点相对应的方阵元素。一些元素为零,其余元素在 1 和大约 2700 之间变化。使用 imshow 和 OrRd 颜色图,我希望所有大于 0 的点阵站点都显示相应的颜色,但重要的是,所有值为 0 的站点都是显示为黑色。我尝试如下定义一个新的颜色图:
colors = [(0,0,0)] + [(pylab.cm.OrRd(i)) for i in range(1,256)]
new_map = matplotlib.colors.LinearSegmentedColormap.from_list('new_map', colors, N=256)
但是我的数组中的值范围太大,所以很多非零值显示为黑色。
非常感谢。
【问题讨论】:
【参考方案1】:Matplotlib 的颜色图有一个 set_bad
和 set_under
属性可用于此目的。这个例子展示了如何使用set_bad
import matplotlib.pyplot as plt
import numpy as np
# make some data
a = np.random.randn(10,10)
# mask some 'bad' data, in your case you would have: data == 0
a = np.ma.masked_where(a < 0.05, a)
# cmap = plt.cm.OrRd
# for mpl 3.3 and higher use
cmap = mpl.cm.get_cmap("OrRd").copy()
cmap.set_bad(color='black')
im = plt.imshow(a, interpolation='none', cmap=cmap)
要使用set_under
变体,您必须在绘图命令中添加vmin
关键字,并且设置略高于零(但低于任何其他有效值):
cmap.set_under(color='black')
im = plt.imshow(a, interpolation='none', cmap=cmap, vmin=0.0000001)
【讨论】:
如何绘制一个也反映该变化的颜色条(0 处为黑色,其他位置为 cmap)? 据我所知,cmap 的set_bad
值在颜色栏中没有表示。但是如果您使用set_under
方法,它会在使用extend="both"
显示over/under 扩展时显示。所以,plt.colorbar(im, extend='both')
、im
是来自imshow()
命令的可映射捕获。以上是关于Python颜色图,但所有零值都映射为黑色的主要内容,如果未能解决你的问题,请参考以下文章
打字稿:如何制作接受对象的类型,其键匹配通用但所有值都是值参数的映射函数