微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在plt.imshow上添加文本

如何解决在plt.imshow上添加文本

我有两个ndarray:Mat,labels 当前,我显示Mat:

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

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

解决方法

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

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

这是一个使用一些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()

example plot

PS:文档中有matplotlib example,用于在没有Seaborn的情况下创建类似内容。它可以很容易地适应从不同矩阵打印字符串的情况,还可以添加测试以根据单元的暗度来更改颜色。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。