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

如何循环批量生成格式一致、数据源不同的Seaborn热力图

Seaborn批量生成同格式热力图实现方案

你的判断完全正确,原代码报错的核心原因是f-string生成的是变量名字符串,无法直接传入作为DataFrame对象,同时原代码还存在中文引号、f-string语法未闭合的语法问题。
和你循环思路最匹配的实现逻辑是直接遍历DataFrame对象与对应保存标识的配对组合,不要依赖字符串拼接变量名取对象,这种写法稳定性和可维护性都更好。


最优写法:读数据+绘图全流程循环处理

不需要提前单独定义df1到df5五个散变量,把文件路径、输出文件名提前配对,循环内完成读数据、绘图、保存全流程,代码最简洁:

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

# 固定绘图配置抽到循环外,避免重复定义
x_labels = ['apple', 'orange', 'kiwi']
y_labels = ['1', '2', '3']

# 配置组:(Excel数据源路径, 输出文件名称前缀)
plot_groups = [
    ("c:/temporary/df1.xlsx", "df1"),
    ("c:/temporary/df2.xlsx", "df2"),
    ("c:/temporary/df3.xlsx", "df3"),
    ("c:/temporary/df4.xlsx", "df4"),
    ("c:/temporary/df5.xlsx", "df5")
]

for data_path, save_tag in plot_groups:
    # 读取当前循环对应的数据源
    current_df = pd.read_excel(data_path)
    fig = plt.figure()
    ax = fig.add_axes([0.25, 0.25, 0.7, 0.7])
    # 直接传入当前DataFrame对象绘图
    sns.heatmap(current_df, xticklabels=x_labels, yticklabels=y_labels, ax=ax)
    fig.savefig(f"c:/temporary/{save_tag}-matrix.png")
    # 主动关闭画布释放内存,避免多图互相干扰
    plt.close(fig)

适配场景:已提前加载好df1-df5变量

如果因为其他业务逻辑需要提前把5个DataFrame加载到内存,直接把对象和对应保存标签打包遍历即可:

# 把已存在的DataFrame对象和保存标签配对
plot_groups = [
    (df1, "df1"),
    (df2, "df2"),
    (df3, "df3"),
    (df4, "df4"),
    (df5, "df5")
]

for current_df, save_tag in plot_groups:
    fig = plt.figure()
    ax = fig.add_axes([0.25, 0.25, 0.7, 0.7])
    sns.heatmap(current_df, xticklabels=x_labels, yticklabels=y_labels, ax=ax)
    fig.savefig(f"c:/temporary/{save_tag}-matrix.png")
    plt.close(fig)

注意:不要使用locals()/globals()通过字符串动态取变量的写法,这类写法调试成本高、可读性差,显式配对遍历是通用的稳妥实现。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 13:18:19