如何从ScalarMappable对象

时间:2016-10-02 23:52:59

标签: python matplotlib

to_rgba州的文档:

  

注意:此方法假定输入表现良好;它没有检查   对于异常,例如x是掩蔽的rgba数组,或者是整数   类型不是uint8,或者是浮点rgba数组   超出0-1范围的值。

但这正是我所需要的:一个蒙面的rgba数组。以下内容改编自this post,并为我提供了正确的值,但nan的值(我在第一行显示为零)应为spc_map_color中的黑色rgba值

spc_map[np.isnan(spc_map)] = 0
gradient_range = matplotlib.colors.Normalize(-1.0, 1.0)
cmap = matplotlib.cm.ScalarMappable(
  gradient_range, self.cm_type)
spc_map_color = cmap.to_rgba(spc_map, bytes=True)

正如您所看到的,使用的colourmap是可变的,但是为掩码之外的值(即nan)返回的rgba值应该是不变的,即总是黑色。

linearsegmentedcolourmap个对象的解答如果存在herehere。但是,如果要使用imshow输出图像,则会执行此操作。我不想那样做。我想要一个数组中的rgba值。

我在转换为rgba之前尝试使用cmap.set_bad(color='black') cmap作为我的ScalarMappable,但ScalarMappable没有set_bad函数。

我错过了一些明显的东西?

你可以使用 spc_map = np.random.randn(256,256)然后做一些事情,例如将所有值设置为零以下,以测试您可能拥有的解决方案

1 个答案:

答案 0 :(得分:0)

黑色通常对应于RGBA阵列中的[0,0,0,1]。因此,只需将所有蒙版位置设置为事后的这些值。

# get mask of masked array
mask = spc_map.mask 

# RGBA array should have one more dimension than spc_map with length 4 
spc_map_color[mask] = np.array([0, 0, 0, 1])