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_badset_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颜色图,但所有零值都映射为黑色的主要内容,如果未能解决你的问题,请参考以下文章

打字稿:如何制作接受对象的类型,其键匹配通用但所有值都是值参数的映射函数

裁剪图像具有不同的黑色边距

学会Python-Matplotlib可视化,快速完成数据分析——自定义颜色绘制精美统计图

灰度梯度

散点图通过颜色matplotlib python分离集群

如何将所有文本颜色更改为默认颜色(文本为黑色,提示为灰色)而不是白色