用标记仅注释特定 windows 的 imshow 热图(例如 "x")

Annotate just specific windows of imshow heatmaps with marks (e.g. "x")

如果 pandas Dataframe 的值是例如,是否可以注释 imshow 热图小于 3,然后在该特定热图中标记“x”window?

假设我有与此示例类似的数据:

d = {'col1': [1,2,1,5,3], 'col2': [3,4,1,5,2],'col3': [3,4,3,1,2],'col4': [3,4,1,2,5]}
df = pd.DataFrame(data=d)

fig = plt.figure(figsize=(6,4))
plot = plt.imshow(df)
ax = plot.axes
ax.invert_yaxis()
ax.set_xticklabels(df.columns)

我看到我们可以用相应的值注释所有热图 windows,但是我不知道如何只注释低于我给定限制的 windows 而不是用相应的值,但是例如带有标记“x”。 如果可以使用 matplotlib 热图,我可以征求建议吗? 谢谢。

  • 遍历这些值,并使用 if-condition 来控制添加文本。
  • 修改自how to annotate heatmap with text in matplotlib
d = {'col1': [1,2,1,5,3], 'col2': [3,4,1,5,2],'col3': [3,4,3,1,2],'col4': [3,4,1,2,5]}
df = pd.DataFrame(data=d)

fig = plt.figure(figsize=(7, 7))
plot = plt.imshow(df)
ax = plot.axes
ax.invert_yaxis()
ax.set_xticks(range(len(df.columns)), df.columns)

for y in range(df.shape[0]):
    for x in range(df.shape[1]):
        val = df.iloc[y, x]
        if val >= 3:
            val = 'x'
        plt.text(x, y, val, fontsize=14,
                 horizontalalignment='center',
                 verticalalignment='center')