使用python中的matplotlib创建具有指定离散颜色映射的热图

时间:2015-06-17 13:44:51

标签: python matplotlib

我想为数据矩阵制作热图,使得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)
相反,它绘制的是白色和紫色,而不是白色和蓝色。如果数据只包含其中一个数字,则只会绘制白色。

1 个答案:

答案 0 :(得分:5)

我相信色彩映射会重新归结为您的数据。传递范围从0到1的值会给出白色的颜色映射:0,蓝色:0.333,红色:0.666,紫色:1.0。

您可以通过将vminvmax传递给地图来阻止此行为。

plt.imshow(dat2, interpolation='none', aspect='auto', origin='upper',
           cmap=cmap, vmin=0, vmax=4)

(我现在没有在我的计算机上运行python,所以我无法测试它。)