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

如何将列表名称转为字符串以批量命名热力图?

解决方法

要实现给每张热力图用对应列表的名称命名,核心是要把「列表数据」和「它的名称字符串」绑定在一起——直接把列表存入元组的方式无法直接获取变量名,这里提供两种可行方案:

方案1:显式绑定名称与数据(推荐)

直接将列表和对应的名称字符串配对存储,循环时可同时拿到名称和数据,代码清晰且不易出错:

import seaborn as sns
import matplotlib.pyplot as plt

# 定义数据列表
list1 = [[1,2,3], [4,5,6], [4,5,6], [4,5,6]]
list2 = [[2,2,3], [1,5,1], [4,2,3], [3,3,6]]

# 存储「名称字符串」与「列表数据」的配对
data_with_names = [("list1", list1), ("list2", list2)]

def generate_heatmap(data, list_name):
    sns.set_style("whitegrid")
    # 指定颜色映射(避免原代码中cmap未定义的错误)
    ax = sns.heatmap(data, cmap='viridis')
    # 用传入的名称设置标题
    plt.title(f"Heatmap of {list_name}")
    # 保存图片到本地(可选)
    plt.savefig(f"{list_name}_heatmap.png")
    # 显示热力图
    plt.show()
    # 关闭画布,避免后续图重叠
    plt.close()

# 循环生成每张热力图
for name, lst in data_with_names:
    generate_heatmap(lst, name)

方案2:通过全局变量反向查找变量名(不推荐)

如果不想手动编写名称字符串,可以通过globals()字典(存储全局变量的映射关系)反向查找列表对应的变量名,但这种方法依赖全局变量命名规则,容易出现重复或误匹配:

import seaborn as sns
import matplotlib.pyplot as plt

list1 = [[1,2,3], [4,5,6], [4,5,6], [4,5,6]]
list2 = [[2,2,3], [1,5,1], [4,2,3], [3,3,6]]
data = [list1, list2]

def get_list_name(lst):
    # 遍历全局变量,匹配列表对应的变量名
    for name, value in globals().items():
        if value is lst and not name.startswith('_'):
            return name
    return "Unknown"

def generate_heatmap(data):
    sns.set_style("whitegrid")
    ax = sns.heatmap(data, cmap='viridis')
    # 获取列表名称并设置标题
    list_name = get_list_name(data)
    plt.title(f"Heatmap of {list_name}")
    plt.savefig(f"{list_name}_heatmap.png")
    plt.show()
    plt.close()

# 循环生成热力图
for lst in data:
    generate_heatmap(lst)

原代码问题修正说明

  • 原函数hm中cmap未定义,需指定具体颜色映射(如'viridis')
  • 标题写死为'df',需动态传入列表名称
  • 循环中调用hm(1)是错误的,应传入循环变量l
  • 未处理画布关闭,易导致多张图重叠

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 14:24:53