我有一个带深度值的numpy-array np.vectorize
。对于数组中的每个单元格,我希望为它们分配预定义的颜色。我目前使用if
和许多(245,223,247)
语句执行此操作。我现在可以制作一些我需要的东西,例如.png
。
我可以创建一个新的numpy数组并将其导出为[[r,g,b],[r,g,b],[r,g,b],[r,g,b]
[r,g,b],[r,g,b],[r,g,b],[r,g,b]
[r,g,b],[r,g,b],[r,g,b],[r,g,b]
[r,g,b],[r,g,b],[r,g,b],[r,g,b]]
- 图像吗?
这是我拥有的数组:
depth
我希望将其翻译成.png图像。
修改
This Gist是打印到文本的UpdateReadModel
- 数组的示例。它太大了,不能在python中显示。它还显示了我想要应用于每个单元格以创建rgb颜色的功能。
答案 0 :(得分:0)
我认为最简单(也是最公平)的解决方案是使用色彩映射。例如:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import colors
N = 256
cols = np.zeros((N,4))
cols[:,0] = np.linspace(0,1,N) # R
cols[:,1] = np.linspace(0,1,N) # G
cols[:,2] = np.linspace(0,1,N) # B
cols[:,3] = 1 # alpha
cmap = colors.ListedColormap(cols,name='MyColormap',N=N)
x,y = np.meshgrid(np.linspace(0,1,100),np.linspace(0,1,100))
d = np.sqrt(x**2+y**2)
fig,ax = plt.subplots()
cax = ax.imshow(d,cmap=cmap,clim=[0,np.sqrt(2.)])
cbar = fig.colorbar(cax,aspect=10)
ax.xaxis.set_ticks(range(0,101,20))
ax.yaxis.set_ticks(range(0,101,20))
plt.xlim([0,100])
plt.ylim([0,100])
plt.xlabel(r'$x$')
plt.ylabel(r'$y$')
plt.savefig('so.png')
结果如下:
请注意,该示例包含一个自定义(但非常简单的灰度)色彩映射,它应该适合您的目的。您也可以使用预定义的内容(例如cmap='afmhot'
),请参阅the matplotlib documentation
如果你想要一组离散的颜色,你可以简单地对你的数据应用阈值处理(在这种情况下为d
)。
我的问题对我来说有点过于宽泛,无法将此专门用于您的示例。对于我们来帮助你,你应该用文字,你的意思更简洁地表达。但我相信你可以从这里独立进步。