我有一个(n,m)数组,我用matplotlib.pyplot.imshow
可视化。我想将这些数据保存在某种类型的光栅图形文件中(例如png),以便:
imshow
interpolation='nearest'
中的imshow
不感兴趣。)我该怎么做?
我已经看到一些代码可以通过使用interpolation='nearest'
并强制matplotlib(勉强)关闭轴,空格等来实现这一点。但是,必须有一些方法可以更直接地执行此操作 - - 也许PIL?毕竟,我有基础数据。如果我可以为底层数组的每个元素获取RGB值,那么我可以使用PIL保存它。有没有办法从imshow
中提取RGB数据?我可以编写自己的代码来将数组值映射到RGB值,但我不想重新发明轮子,因为matplotlib中已存在该功能。
答案 0 :(得分:27)
正如您已经猜到的那样,没有必要创建一个数字。你基本上需要三个步骤。规范化数据,应用色彩映射,保存图像。 matplotlib提供了所有必要的功能:
import numpy as np
import matplotlib.pyplot as plt
# some data (512x512)
import scipy.misc
data = scipy.misc.lena()
# a colormap and a normalization instance
cmap = plt.cm.jet
norm = plt.Normalize(vmin=data.min(), vmax=data.max())
# map the normalized data to colors
# image is now RGBA (512x512x4)
image = cmap(norm(data))
# save the image
plt.imsave('test.png', image)
虽然上面的代码解释了单个步骤,但您也可以让imsave
完成所有三个步骤(类似于imshow
):
plt.imsave('test.png', data, cmap=cmap)
结果(test.png):