You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在热图中正确标注数值并调整数据精度匹配显示效果

问题根因

你遇到的标注与颜色不匹配问题,核心原因是热图渲染色阶用的是原始精度数值,而单元格标注仅为显示层面的四舍五入,两者数据源不一致导致。


解决方案

方案1:保持2位小数标注,让热图颜色与标注值匹配

如果你希望热图颜色完全对应标注显示的2位小数值,直接在数据重塑后按设定精度做四舍五入,统一热图和标注的数据源即可:
在data = data.reshape(n,n)这行之后新增一行代码:
data = np.round(data, precis)

修改后完整函数示例:

import numpy as np
import matplotlib.pyplot as plt

data = [ 0.00662896, -0.00213044, -0.00156812,  0.01450994, -0.00875174, -0.01561342, -0.00694762,  0.00476027,  0.00470659]

def plot_heatmap(pathOut, data, title, fileName, precis=2, show=False):
    from matplotlib import cm
    fig  = plt.figure()
    n       = int(np.sqrt(len(data)))
    data    = data.reshape(n,n)
    # 新增行:按显示精度四舍五入数据,统一渲染和标注的数据源
    data = np.round(data, precis)
    heatmap = plt.pcolor(data,cmap=cm.YlOrBr)
    xLabels = (np.linspace(1,n,n,dtype=int))
    yLabels = (np.linspace(1,n,n,dtype=int))
    xpos    = np.linspace(1,n,n)-0.5
    ypos    = np.linspace(1,n,n)-0.5

    for y in range(n):
        for x in range(n):
            plt.text(x + 0.5, y + 0.5, f'{data[y, x]:.{precis}f}',
                horizontalalignment='center',
                verticalalignment='center',
                )
    # 色阶格式也适配精度参数,避免硬编码
    plt.colorbar(heatmap, format=f'%.{precis}f')
    plt.xticks(xpos,xLabels)
    plt.yticks(ypos,yLabels)
    plt.title(f'{title}')
    if show:     
        plt.show()    
    fig.savefig(f'{pathOut}/{fileName}.pdf', format='pdf')   
    if not show:
        plt.close(fig)

修改后热图渲染、单元格标注、色阶显示都会基于四舍五入后的数值,不会出现标注为0但颜色有差异的情况。


方案2:保留原始数据精度,调整标注显示避免0值误导

如果你需要热图保留原始数据的精度差异,仅调整标注显示避免误读,可以选择两种调整方式:

  • 调高显示精度:调用函数时传入precis=3或precis=4,显示更多小数位反映真实数值
  • 改用有效数字格式化:将标注的f-string改为f'{data[y, x]:.{precis}g}',自动适配小数位数显示有效数字,不会出现大量0值

内容的提问来源于stack exchange,提问作者mssandes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 07:45:05