Skip to main content
 首页 » 编程设计

python之使用 python 中的 matplotlib 制作具有指定离散颜色映射的热图

2025年05月04日38xiaohuochai

我想为数据矩阵制作一个热图,使得所有为 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 到 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,所以我无法测试它。)