我想为数据矩阵制作热图,使得1的所有位置都是红色,2的所有位置都是白色,等等具有任意规格。理想情况下,这应该处理所有值相同的情况,只绘制一个统一的颜色。
我提出的最佳解决方案是:
from matplotlib import colors
import matplotlib.pyplot as plt
import numpy as np
cmap = colors.ListedColormap(['white', 'blue', 'red', 'purple'])
data = np.array([[0, 0,0,0], [1, 1, 1, 1], [2, 2, 2, 2], [3, 3, 3, 3]])
plt.imshow(data, interpolation='none', aspect='auto', origin='upper', cmap=cmap)
成功打印每种颜色的条纹。但是,如果我改为:
dat2 = np.array([[0, 0,0,0], [1, 1, 1, 1]])
plt.imshow(dat2, interpolation='none', aspect='auto', origin='upper', cmap=cmap)
相反,它绘制的是白色和紫色,而不是白色和蓝色。如果数据只包含其中一个数字,则只会绘制白色。
答案 0 :(得分:5)
我相信色彩映射会重新归结为您的数据。传递范围从0到1的值会给出白色的颜色映射:0,蓝色:0.333,红色:0.666,紫色:1.0。
您可以通过将vmin
和vmax
传递给地图来阻止此行为。
plt.imshow(dat2, interpolation='none', aspect='auto', origin='upper',
cmap=cmap, vmin=0, vmax=4)
(我现在没有在我的计算机上运行python,所以我无法测试它。)