Matplotlib:二进制热图

4
假设我有一个大小为10x10的矩阵,由0和1组成,表示为列表的列表。我该如何使用matplotlib将这样一个矩阵呈现为红色和黑色方块的网格呢?(1为红色,0为黑色)。
我已经进行了广泛搜索,但最接近的是在matplotlib中绘制黑白二进制地图,但颜色是小于1的浮点数。一旦数据中出现1,图表就会出错。有人能帮忙吗?或者指向特定的matplotlib文档,帮助我克服这个问题?

这个问题与以下内容相关:https://dev59.com/3mkw5IYBdhLWcg3ws8tj - cel
1个回答

9
您需要的是所谓的ListedColorMap
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl

# random data
x = np.random.random_integers(0, 1, (10, 10))

fig, ax = plt.subplots()

# define the colors
cmap = mpl.colors.ListedColormap(['r', 'k'])

# create a normalize object the describes the limits of
# each color
bounds = [0., 0.5, 1.]
norm = mpl.colors.BoundaryNorm(bounds, cmap.N)

# plot it
ax.imshow(x, interpolation='none', cmap=cmap, norm=norm)

enter image description here


2
如果你想要一个同时生成色图和归一化函数的函数,可以使用from_levels_and_colors。例如:cmap, norm = from_levels_and_colors([0, 0.5, 1], ['r', 'k']) - Joe Kington
@tcaswell - 这是最近添加的(我想大约是1.2版本?)。有趣的是,我本来以为是你添加的,但看起来是Phil:https://github.com/matplotlib/matplotlib/commit/c16c3c290eb32c4e8874a0e9cf4946a2b57b5dc3 - Joe Kington
这个程序可以运行,但颜色是反过来的:1 是黑色,0 是红色。我在 cmap 行中改变了颜色: cmap = mpl.colors.ListedColormap(['k', 'r']) 现在可以正常运行! - wmnorth

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接