我想为数据矩阵制作一个热图,使得所有为 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,所以我无法测试它。)
关于python - 使用 python 中的 matplotlib 制作具有指定离散颜色映射的热图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30893483/