【问题标题】:manually applying a colormap loses the set_bad property手动应用颜色图会丢失 set_bad 属性
【发布时间】:2020-09-30 23:26:53
【问题描述】:

我想在磁盘上保存一个颜色映射图像(即应用了颜色映射的灰度图像)。它的大部分值是np.nans,我想用特殊颜色(例如红色)保留它。 如果我使用plt.imshow 绘制图像,它可以工作,但如果我单独应用颜色图则不行。

这是一个显示行为的示例代码:

import numpy as np
import matplotlib.pyplot as plt
import PIL.Image as Image

a = np.zeros((20, 20))
a[10, 10] = 10
a[a == 0] = np.nan

current_cmap = plt.cm.get_cmap('viridis')
current_cmap.set_bad(color='red')
plt.imshow(a, vmin=0, vmax=20)

这就是我想保存在磁盘上的内容(作为 png,而不是 matplotlib 图)。我通常会使用 PIL 来保存数组。

norm = plt.Normalize(0, 20)
b = current_cmap(norm(a))
Image.fromarray(np.uint8(b * 255)).show()

(与我的 OS 图像查看器一起显示,它在缩放时应用了一些插值)。我可以看到中心的颜色映射得很好,但我失去了 nans 的红色。

总的来说,我这样做是因为我想用正确的颜色图和正确的 nan 的颜色将 imshow 的输出保存到磁盘,所以任何解决这个问题的方法都对我有用。

【问题讨论】:

    标签: python numpy matplotlib colormap


    【解决方案1】:

    如此处所述:https://github.com/matplotlib/matplotlib/issues/9892 解决办法是

    norm = plt.Normalize(0, 20)
    b = current_cmap(np.ma.masked_invalid(norm(a)))
    Image.fromarray(np.uint8(b * 255)).show()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-16
      • 2014-10-19
      • 1970-01-01
      • 2016-01-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多