Seaborn 热力图标注 ValueError: 对象类型为 'numpy.str_' 的未知格式代码 'g'

10
我希望绘制一个 seaborn.heatmap 并且只注释某些行/列。
所有单元格都有注释的示例:
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np


n1 = 5
n2 = 10
M = np.random.random((n1, n2))   

fig, ax = plt.subplots()

sns.heatmap(ax = ax, data = M, annot = True)

plt.show()

enter image description here

这些示例(段落添加值注释)之后,可以将一个带有每个单元格注释的数组作为annot参数传递给seaborn.heatmap

annot:bool或矩形数据集,可选
如果为True,则在每个单元格中写入数据值。如果是与数据相同形状的类似数组, 则使用它来注释热图,而不是使用数据。 请注意,数据框将按位置匹配,而不是索引。

如果我尝试生成一个str数组并将其作为annot参数传递给seaborn.heatmap,则会出现以下错误:

Traceback (most recent call last):
  File "C:/.../myfile.py", line 16, in <module>
    sns.heatmap(ax = ax, data = M, annot = A)
  File "C:\venv\lib\site-packages\seaborn\_decorators.py", line 46, in inner_f
    return f(**kwargs)
  File "C:\venv\lib\site-packages\seaborn\matrix.py", line 558, in heatmap
    plotter.plot(ax, cbar_ax, kwargs)
  File "C:\venv\lib\site-packages\seaborn\matrix.py", line 353, in plot
    self._annotate_heatmap(ax, mesh)
  File "C:\venv\lib\site-packages\seaborn\matrix.py", line 262, in _annotate_heatmap
    annotation = ("{:" + self.fmt + "}").format(val)
ValueError: Unknown format code 'g' for object of type 'numpy.str_'

以下是生成 ValueError 的代码(本例中我尝试以第四列注释为例):

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


n1 = 5
n2 = 10
M = np.random.random((n1, n2))

A = np.array([[f'{M[i, j]:.2f}' for j in range(n2)] for i in range(n1)])
A[:, 3] = ''


fig, ax = plt.subplots(figsize = (6, 3))

sns.heatmap(ax = ax, data = M, annot = A)

plt.show()

这个错误的原因是什么?我怎样才能生成一个seaborn.heatmap并且只注释选定的行/列?
1个回答

13

这是一个格式问题。如果您使用非数字标签(默认为:fmt='.2g'),则需要 fmt = '',因为它仅考虑数字值,并对文本格式的标签抛出错误。

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


n1 = 5
n2 = 10
M = np.random.random((n1, n2))

A = np.array([[f'{M[i, j]:.2f}' for j in range(n2)] for i in range(n1)])
A[:, 3] = ''


fig, ax = plt.subplots(figsize = (6, 3))

sns.heatmap(ax = ax, data = M, annot = A, fmt='')

plt.show()

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