matplotlib 色彩Map表索引减一

l5tcr1uw  于 2023-10-24  发布在  其他
关注(0)|答案(1)|浏览(123)

我使用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保存了。这是怎么回事?

ctehm74n

ctehm74n1#

您误解了颜色Map的工作原理。单个值不会Map到颜色。相反,颜色Map器尝试在所有数据中Map整个颜色范围。在第一个示例中,数组中的最小值为零,因此Map到颜色范围的最低端(黑色)。最大值为5,因此,它被Map到颜色范围的高端(粉红色)。所有其他值都被分配给在0和5之间插值的颜色。您的颜色范围在数组中的最高值和最低值之间“拉伸”。

相关问题