Tvally 2024-08-18 23:53 采纳率: 64.7%
浏览 4

seaborn画热图时数值显示问题

使用python 的seaborn画图时遇到一个问题

def custom_annot(x):
    if x == -100:
        return '-'
    else:
        return f'{x:.2f}'


plt.figure(dpi=1000)
sns.clustermap(df.iloc[:, :], #对df进行切片操作,[:,0:4]表示切片的部分
            cmap = cmap,
            #ax = ax,
            vmax = 12, vmin = -12,
            row_cluster=True, #行方向聚类
            col_cluster=False, #列方向不聚类
            yticklabels=True,
            figsize=(15,50),
            annot=True, # 显示数值
            fmt='.2f',
            annot_kws={'formatter': custom_annot},
            # cbar_kws = {'orientation':'vertical','shrink': 0.3},
            # annot=False,
            # square = True,
            metric='euclidean', 
            method='complete',
            center=0
            #dendrogram_ratio=(.1, .2)
            )
plt.yticks(rotation='horizontal')
plt.ylabel('')

# 设置索引值的字体
# for tick in ax.get_yticklabels():
#     # tick.set_fontname('Arial')#设置格式
    
# for tick in ax.get_xticklabels():
#     tick.set_weight('bold')
#     tick.set_style('italic')

plt.show()

我希望画出的热力图可以显示数值,但是当单元格数值为-100时显示横杠,其他情况则原样输出,这样修改后无法实现。希望大家帮我看看哪里有问题

  • 写回答

3条回答 默认 最新

  • 何事_ 2024-08-18 23:53
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    你的代码看起来已经正确地定义了一个自定义注解函数 custom_annot,该函数在数值为-100时返回 '-'。然后,在 sns.clustermap 函数中使用了 annot_kws={'formatter': custom_annot} 来应用这个自定义函数。理论上,这个代码应该能在热力图上为数值-100显示横杠,而其他数值则正常显示。

    如果这个问题仍然存在,可能有以下几个原因:

    1. 数据问题:确保你的数据框 df 中的值确实包含 -100 这个值。你可以通过打印 df.min().min()df.max().max() 来检查数据框中的最小值和最大值。这将帮助你确认数据中是否包含 -100 这个值。
    2. 渲染顺序问题:有时,绘图库的渲染顺序可能会导致一些问题。尝试将你的代码分成两部分,首先绘制不含自定义注解的热力图,然后在此基础上添加自定义注解。你可以使用 plt.gca().annotate() 函数来手动添加注解。
    3. Seaborn版本问题:确认你使用的 seaborn 版本是否支持这个特性。在某些旧版本中可能存在一些已知的问题或限制。你可以尝试更新 seaborn 到最新版本,看是否可以解决问题。你可以使用以下命令来更新 seaborn:
    pip install --upgrade seaborn
    

    如果以上建议都不能解决你的问题,我建议你尝试创建一个简单的示例数据集并运行你的代码,以确认问题是否特定于你的数据集或数据预处理步骤。如果问题仍然存在,请提供更多关于你的数据和环境的详细信息,以便我能更准确地帮助你解决问题。

    评论

报告相同问题?

问题事件

  • 创建了问题 8月18日

悬赏问题

  • ¥15 关于#python#的问题:我知道这个问题对你们来说肯定so easy
  • ¥15 wpf datagrid如何实现多层表头
  • ¥15 为啥画版图在Run DRC会出现Connect Error?可我Calibre的hostname和计算机的hostname已经设置成一样的了。
  • ¥20 网站后台使用极速模式非常的卡
  • ¥20 Keil uVision5创建project没反应
  • ¥15 mmseqs内存报错
  • ¥15 vika文档如何与obsidian同步
  • ¥15 华为手机相册里面的照片能够替换成自己想要的照片吗?
  • ¥15 陆空双模式无人机飞控设置
  • ¥15 sentaurus lithography