我使用Matplotlib的ListedColorMap
:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.colors as clr
cmap = clr.ListedColormap(['#000000', '#ee82ee', '#4b0082', '#0000ff', '#00ff00', '#ffff00', '#ffa500', '#ff0000', '#00ffff', '#ffc0cb'], name='test-cmap')
10种颜色,带索引:
- 0黑色
- 1紫罗兰色
- 2靛蓝
- 3个蓝色
- 4绿色
- 5黄色
- 6橙子
- 7红
- 8青色
- 9朵粉色
当我填充对应于颜色Map表索引的形状为(10,1)的NumPy数组时,如果我不包括索引9,则它将关闭1:
ar = np.zeros((10, 1))
ar[0, 0] = 2
ar[1, 0] = 0
ar[2, 0] = 0
ar[3, 0] = 2
ar[4, 0] = 0
ar[5, 0] = 5
ar[6, 0] = 0
ar[7, 0] = 0
ar[8, 0] = 0
ar[9, 0] = 3
plt.imsave('{}/apus.png'.format(outputDir), ar, cmap=cmap)
我应该看到在索引0,2,3,5中找到的颜色。索引与颜色黑色,靛蓝,蓝色和黄色有关。而保存的图像有黑色,绿色,粉红色和橙子:
如果我添加一个9(索引为粉红色,色彩Map表中的最后一个索引),图像将正确地与色彩Map表相关:
ar = np.zeros((10, 1))
ar[0, 0] = 2
ar[1, 0] = 9 # Pink added
ar[2, 0] = 0
ar[3, 0] = 2
ar[4, 0] = 0
ar[5, 0] = 5
ar[6, 0] = 0
ar[7, 0] = 0
ar[8, 0] = 0
ar[9, 0] = 3
plt.imsave('{}/apus.png'.format(outputDir), ar, cmap=cmap)
我可以把9的值放在任何索引上,图像就用正确的颜色Map保存了。这是怎么回事?
1条答案
按热度按时间ctehm74n1#
您误解了颜色Map的工作原理。单个值不会Map到颜色。相反,颜色Map器尝试在所有数据中Map整个颜色范围。在第一个示例中,数组中的最小值为零,因此Map到颜色范围的最低端(黑色)。最大值为5,因此,它被Map到颜色范围的高端(粉红色)。所有其他值都被分配给在0和5之间插值的颜色。您的颜色范围在数组中的最高值和最低值之间“拉伸”。