在plt.imshow上添加文字

5

我有两个 ndarray 数组:Mat 和 labels。 目前我正在展示 Mat:

plt.imshow(Mat, cmap='gray', vmin=0, vmax=1, interpolation='None')

labels与Mat具有相同的形状,labels[(i,j)]包含Mat[(i,j)]的标签。如何在每个像素上显示该标签?

1个回答

8
最简单的方法是使用Seaborn的热力图(heatmap)。当annot=True时,它会将数据值打印到单元格中。但是annot=也可以是一个标签矩阵。在这种情况下,设置打印格式为字符串(fmt='s')非常重要。annot_kws=可以设置其他关键字, 如字体大小或颜色。在调用heatmap()时可以包含xyticklabels,或者使用matplotlib在之后设置。

默认着色的一个重要优点是,Seaborn 在浅色单元格上使用黑色,在深色单元格上使用白色。

以下示例使用一些utf8字符作为标签。

from matplotlib import pyplot as plt
import numpy as np
import seaborn as sns

M, N = 5, 10
mat = np.random.rand(M, N)
labels = np.random.choice(['X', '☀', '★', '♛'], size=(M, N))
ax = sns.heatmap(mat, cmap="inferno", annot=labels, annot_kws={'fontsize': 16}, fmt='s')
plt.show()

示例图

PS:文档中有一个Matplotlib示例可以创建类似的图表,而不需要使用Seaborn。它可以轻松地适应从不同矩阵中打印字符串,并且还可以添加测试以根据单元格明暗程度更改颜色。


这个 maplotlib 示例 正是我所需要的。 - nivniv

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