【发布时间】: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