讲师中心 微信公众号
AI工具推荐 视频效率加速

如何将 Python 生成的图表按网格布局(每行2图)嵌入 Excel 文件

胖涛姑娘_5613

胖涛姑娘_5613

发布时间:2026-08-17 09:53:11

|

499人浏览过

|

来源于php中文网

原创

如何将 Python 生成的图表按网格布局(每行2图)嵌入 Excel 文件

本文详解如何使用 pandas、matplotlib 和 xlsxwriter 将多列时间序列数据自动绘制成图表,并以紧凑的两列网格形式批量插入 excel,避免图表错位、间距失控等问题。

本文详解如何使用 pandas、matplotlib 和 xlsxwriter 将多列时间序列数据自动绘制成图表,并以紧凑的两列网格形式批量插入 excel,避免图表错位、间距失控等问题。

在将 Python 绘制的图表导出到 Excel 时,原代码仅通过线性累加 y_offset 实现垂直堆叠,导致所有图表纵向排列、间隔过大(如首图在列 D、次图跳至列 AFD),且未控制列位置,无法形成规整网格。要实现「每行 2 图」的整齐布局,关键在于动态计算单元格坐标(row, col)而非像素偏移(x_offset, y_offset),并合理设置图像缩放比例与行列间距。

以下是优化后的完整实现方案:

import pandas as pd
import matplotlib.pyplot as plt
import xlsxwriter
import io

def generate_seasonal_charts(file_path, start_date, end_date, output_file):
    # 数据读取与预处理
    df = pd.read_excel(file_path)
    df['Date'] = pd.to_datetime(df['Date'])
    df = df[(df['Date'] >= start_date) & (df['Date'] <= end_date)]
    df.set_index('Date', inplace=True)

    # 创建 Excel 工作簿与工作表
    workbook = xlsxwriter.Workbook(output_file)
    worksheet = workbook.add_worksheet("Charts")

    # 图表参数配置(单位:像素)
    image_width_px = 800
    image_height_px = 400
    row_height = 30  # Excel 行高(约对应 40 像素)
    col_width = 15   # Excel 列宽(约对应 114 像素)

    # 每行显示 2 个图表 → 计算起始单元格位置(row, col)
    charts_per_row = 2
    chart_row_start = 1  # 从第 2 行开始(索引为 1,跳过标题行)
    chart_col_start = 1  # 从 B 列开始(索引为 1)

    # 遍历所有数据列(跳过索引列 'Date',即 df.columns[0])
    for i, column in enumerate(df.columns):
        if column == 'Date':  # 显式跳过日期列(更健壮于 df.columns[1:])
            continue

        # 计算当前图表所在 Excel 单元格位置
        row_idx = chart_row_start + (i // charts_per_row) * 25  # 每图占约 25 行(预留空间)
        col_idx = chart_col_start + (i % charts_per_row) * 15   # 每图占约 15 列宽度

        # 绘图
        fig, ax = plt.subplots(figsize=(10, 6))
        ax.plot(df.index, df[column], linewidth=1.5)
        ax.set_xlabel('Date')
        ax.set_ylabel('Price')
        ax.set_title(f'Price Trend: {column}', fontsize=12, fontweight='bold')
        ax.grid(True, alpha=0.7)
        plt.tight_layout()

        # 保存为 PNG 字节流
        buf = io.BytesIO()
        fig.savefig(buf, format='png', dpi=120, bbox_inches='tight')
        buf.seek(0)

        # 插入 Excel:使用 cell position(非 pixel offset)+ 自适应缩放
        # x_scale / y_scale 确保图像清晰填充指定区域(推荐固定比例)
        worksheet.insert_image(
            row_idx, col_idx, '',
            {
                'image_data': buf,
                'x_scale': 1.0,
                'y_scale': 1.0,
                'positioning': 1  # 可移动可调整大小(Excel 中双击可编辑)
            }
        )

        plt.close(fig)

    workbook.close()
    print(f"✅ Charts successfully exported to {output_file}")

# ✅ 正确调用方式(修复原代码中位置错误的函数调用)
if __name__ == "__main__":
    file_path = "chart testing.xlsx"
    output_file = "output_with_grid.xlsx"
    start_date = '2018-01-01'
    end_date = '2023-12-31'

    generate_seasonal_charts(file_path, start_date, end_date, output_file)

关键改进说明:

Excel XLSX Formula Cleanup
Excel XLSX Formula Cleanup

诊断并修复涉及公式、命名范围、Power Query 刷新、数据透视表、VBA/宏保存等问题的 Microsoft Excel XLSX 工作簿

下载
  • ✅ 网格定位逻辑:使用 (i // 2) 控制行号递增、(i % 2) 控制列号轮换,天然实现「左→右、上→下」的网格填充;
  • ✅ Excel 坐标系优先:insert_image(row, col, ...) 直接指定单元格位置,彻底规避像素偏移导致的错位(如 AFD 列异常);
  • ✅ 响应式缩放:设 'x_scale': 1.0, 'y_scale': 1.0 并配合 positioning=1,使图像在 Excel 中自动适配单元格区域,双击可拖拽调整;
  • ✅ 健壮性增强:显式跳过 'Date' 列(而非依赖 df.columns[1:]),避免列顺序变动引发错误;
  • ✅ 结构规范:将入口逻辑封装于 if __name__ == "__main__":,消除原代码中 workbook.close() 后误写参数的严重语法隐患。

注意事项:

立即学习“Python免费学习笔记(深入)”;

  • Excel 中图像默认锚定在单元格左上角,若需微调,可在 Excel 中选中图片 → 「格式图片」→「属性」→ 选择「大小和属性」手动对齐;
  • 若图表过多导致 Excel 行数溢出,可增大 * 25 中的乘数(如改为 * 30)以增加行间距;
  • dpi=120 保障导出图像清晰度,低于 96 可能模糊,高于 150 会显著增大文件体积。

通过以上重构,您即可一键生成专业、紧凑、易维护的多图表 Excel 报告,真正实现“所见即所得”的网格化可视化输出。

热门AI工具

更多
UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

相关专题

更多
python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

1771

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

4644

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

1749

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

27577

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

3327

2023.08.04

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

3327

2023.08.04

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

1203

2023.08.11

python合并两个列表
python合并两个列表

Python是一种强大的编程语言,具有许多方便的功能和工具。在Python中,有多种方法可以合并两个列表。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

596

2023.08.10

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

0

2026.10.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Excel 教程
Excel 教程

共162课时 | 44.5万人学习

成为PHP架构师-自制PHP框架
成为PHP架构师-自制PHP框架

共28课时 | 3.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn