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

标签 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)

相反,它绘制的是白色和紫色,而不是白色和蓝色。如果数据只包含其中一个数字,它只会绘制白色。

最佳答案

我相信颜色图正在重新规范化您的数据。传递 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,所以我无法测试它。)

关于python - 使用 python 中的 matplotlib 制作具有指定离散颜色映射的热图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30893483/

相关文章:

python - Matplotlib 只保存没有空格的文本

python - latex 故障 ipython daft matplotlib

python - 来自数据框的散点图,在 x 轴上有索引

android - 使用kivy向服务器发送数据

python - if 语句与 return 到一行

python - SWIG:如何使用 %apply 返回结构? 'No typemaps defined' 警告

python - 将 matplotlib 动画加速到视频文件

python - 循环赛的分组列表组合

python - 计算滑动范围内的点数

python - 参数维度不兼容,filling_ Between 出现问题