在 plt.imshow 上添加文本

oba*_*bar 5 matplotlib imshow

我有两个 ndarray:Mat、标签 目前我显示 Mat:

plt.imshow(Mat, cmap='gray', vmin=0, vmax=1, interpolation='None')
Run Code Online (Sandbox Code Playgroud)

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

Joh*_*anC 8

最简单的方法是使用 Seaborn 的热图。当annot=True它将数据值打印到单元格中时。但annot=也可以是标签矩阵。在这种情况下,将打印格式设置为字符串 ( ) 很重要fmt=\'s\'annot_kws=可以设置其他关键字,例如字体大小或颜色。x并且yticklabels可以合并到对 的调用中heatmap(),或者随后使用 matplotlib 设置。

\n

默认颜色的一个重要好处是,Sorn 在浅色单元上使用黑色,在深色单元上使用白色。

\n

下面是一个使用一些 utf8 字符作为标签的示例。

\n
from matplotlib import pyplot as plt\nimport numpy as np\nimport seaborn as sns\n\nM, N = 5, 10\nmat = np.random.rand(M, N)\nlabels = np.random.choice([\'X\', \'\xe2\x98\x80\', \'\xe2\x98\x85\', \'\xe2\x99\x9b\'], size=(M, N))\nax = sns.heatmap(mat, cmap="inferno", annot=labels, annot_kws={\'fontsize\': 16}, fmt=\'s\')\nplt.show()\n
Run Code Online (Sandbox Code Playgroud)\n

示例图

\n

PS:文档中有一个matplotlib 示例,可以在不使用 Seaborn 的情况下创建类似的东西。它可以轻松地适应从不同矩阵打印字符串,并且还可以添加测试以根据单元黑暗度改变颜色。

\n