Python数据可视化之在Excel中插入图表

 更新时间:2025年04月30日 08:52:57   作者:布拉德·甘·拉敎  
在数据分析与展示的领域中,Python 凭借其强大的库支持,成为众多开发者与数据工作者的得力助手,今天就带大家深入探索如何利用 Python 在 Excel 中插入图表,实现数据可视化的进阶操作吧

Python 操作 Excel 插入图表:解锁数据可视化的高效密码

在数据分析与展示的领域中,Python 凭借其强大的库支持,成为众多开发者与数据工作者的得力助手。将图表嵌入 Excel 文件,不仅能丰富数据呈现形式,还能让信息传递更加直观高效。今天,就带大家深入探索如何利用 Python 在 Excel 中插入图表,实现数据可视化的进阶操作。

在实现 Python 在 Excel 中插入图表之前,需要确保安装了以下关键库:

pandas :用于数据处理和分析,方便将数据组织成合适的数据结构。

matplotlib :是 Python 经典的绘图库,负责生成各类图表,此示例中用于创建柱状图。

openpyxl :专注于操作 Excel 2010 及以上版本的.xlsx 文件,支持在 Excel 工作表中添加、修改和读取数据,以及插入图表等操作。

Pillow :作为 Python Imaging Library(PIL)的一个友好分支,主要用于处理图像相关的操作,在这里用于加载和调整图表图片。

以下是将柱状图插入 Excel 的完整代码示例:

from openpyxl import load_workbook
from openpyxl.drawing.image import Image
import matplotlib.pyplot as plt
import pandas as pd

def insert_sheet_to_chart_bar(filename, df):
    # 提取数据  [{'A会员数量': 1783, 'B会员数量': 648}]
    categories = list(df.columns)
    values = list(df.values.flatten().tolist())
    # 生成柱状图
    plt.figure(figsize=(8, 4))
    bars = plt.bar(categories, values, color=['#1f77b4', '#ff7f0e'])

    # 设置中文显示
    plt.rcParams['font.sans-serif'] = ['SimHei']
    plt.title("会员数量对比")
    plt.ylabel("数量")

    # 添加数值标签
    for bar in bars:
        height = bar.get_height()
        plt.text(bar.get_x() + bar.get_width() / 2., height,
                 f'{int(height)}',
                 ha='center', va='bottom')

    # 保存图表图片
    chart_path = 'membership_chart.png'
    plt.savefig(chart_path, dpi=300, bbox_inches='tight')
    plt.close()

    # 创建Excel并插入图表
    wb = Workbook()
    ws = wb.active

    # 插入图表图片
    img = Image(chart_path)
    img.width = 1000  # 调整宽度
    img.height = 550  # 调整高度
    ws.add_image(img, 'D2')  # 插入到 D2 单元格位置
    wb.save(filename)

代码说明 :

  • 该函数 insert_sheet_to_chart_bar 接收两个参数,filename 表示需要插入图表的 Excel 文件路径,df 是包含数据的 pandas DataFrame 对象。
  • 通过提取 DataFrame 的列名作为柱状图的类别(categories),将数据值展平并转换为列表作为柱状图的高度(values)。
  • 使用 matplotlib 创建柱状图,设置图表标题、坐标轴标签,并添加数值标签以增强图表的可读性。然后将生成的图表保存为图片文件。
  • 利用 openpyxl 加载目标 Excel 文件,获取指定的工作表,通过 Image 类加载图表图片,并设置合适的宽度和高度,最终将图片插入到指定的单元格位置,并保存修改后的 Excel 文件。

在实际应用中,若要插入其他类型的图表,如折线图、饼图等,可对 matplotlib 的绘图方法和参数进行相应调整。此外,还需注意以下几点:

确保 Excel 文件路径正确,且文件在读取和保存过程中没有被其他程序占用。

根据实际数据规模和需求,合理调整图表尺寸和图片分辨率,以确保图表在 Excel 中的显示效果清晰、美观。若图片尺寸过大或过小,可能会影响整体布局和可读性。

当数据中包含中文字符时,设置字体为 SimHei(黑体)可以有效避免中文显示乱码的问题,但不同系统环境下字体的安装和配置可能存在差异,需确保系统中已安装相应的字体。

掌握 Python 在 Excel 中插入图表的技能,能够为数据分析报告的制作、业务数据的可视化展示等工作带来极大的便利和效率提升,助力大家在数据处理与展示领域更加游刃有余。

进阶:精准插入图表到指定 Excel 工作表

在处理数据的过程中,我们常常需要将生成的图表精准地插入到已存在数据的 Excel 文件的指定工作表中。借助 Python 的强大库组合,这一操作得以高效实现。以下是经过优化和注释补充的代码,助你轻松完成这一任务。

from openpyxl import load_workbook
from openpyxl.drawing.image import Image
import matplotlib.pyplot as plt
import pandas as pd

def insert_sheet_to_chart_bar(filename, df, sheet_name):
    """
    将柱状图插入到指定的 Excel 工作表中
    
    参数:
    filename -- Excel 文件路径
    df -- 包含图表数据的 pandas DataFrame 对象
    sheet_name -- 目标工作表名称
    """
    
    # 提取数据:从 DataFrame 中获取列名和数据值
    categories = list(df.columns)  # 获取列名作为柱状图分类标签
    values = list(df.values.flatten().tolist())  # 将数据展平并转换为列表形式
    
    # 生成柱状图
    plt.figure(figsize=(8, 4))
    bars = plt.bar(categories, values, color=['#1f77b4', '#ff7f0e'])
    
    # 设置中文显示:指定字体以确保中文标题和标签显示正确
    plt.rcParams['font.sans-serif'] = ['SimHei']
    plt.title("会员数量对比")  # 设置图表标题
    plt.ylabel("数量")  # 设置纵轴标签
    
    # 添加数值标签:在每个柱子上方显示具体数值
    for bar in bars:
        height = bar.get_height()
        plt.text(bar.get_x() + bar.get_width() / 2., height,
                 f'{int(height)}',
                 ha='center', va='bottom')
    
    # 保存图表图片:将生成的图表保存为 PNG 格式
    chart_path = 'membership_chart.png'
    plt.savefig(chart_path, dpi=300, bbox_inches='tight')
    plt.close()
    
    # 读取 Excel 文件:加载已存在的 Excel 文件以便进行修改
    wb = load_workbook(filename)
    
    # 获取指定工作表:确保图表插入到正确的工作表中
    if sheet_name in wb.sheetnames:
        ws = wb[sheet_name]
    else:
        ws = wb.create_sheet(sheet_name)  # 如果工作表不存在,则创建
    
    # 插入图表图片:加载图表图片并调整大小,然后插入到指定位置
    img = Image(chart_path)
    img.width = 1000  # 设置图片宽度
    img.height = 550  # 设置图片高度
    ws.add_image(img, 'D2')  # 将图片插入到 D2 单元格位置
    
    # 保存修改后的 Excel 文件:确保所有更改被保存
    wb.save(filename)

代码应用实例

假设有一个名为 data.xlsx 的 Excel 文件,其中包含一个名为 Sheet1 的工作表,该工作表中有两列数据(例如:A 列是月份,B 列是销售额)。我们可以通过以下代码将柱状图插入到 Sheet1 中:

# 导入 pandas 库
import pandas as pd

# 创建示例 DataFrame
data = {'月份': ['1月', '2月', '3月'], '销售额': [2500, 3200, 2800]}
df = pd.DataFrame(data)

# 直接读取指定sheet下的数据

# 指定要读取的工作表名称
sheet_name = 'Sheet1'
df = pd.read_excel('data.xlsx', sheet_name=sheet_name)
print(df)

# 调用函数
insert_sheet_to_chart_bar('data.xlsx', df, 'Sheet1')

关键点总结

精确指定工作表 :通过传递 sheet_name 参数,可以确保图表插入到正确的 Excel 工作表中。如果工作表不存在,代码会自动创建该工作表。

图表生成与保存 :使用 matplotlib 库生成柱状图,并保存为图片文件。在生成图表时,可以根据实际需求设置图表的标题、坐标轴标签、颜色、数值标签等属性。

图片插入与调整 :利用 openpyxl 库加载保存的图片,调整图片的宽度和高度,使其在 Excel 中显示时具有合适的大小,并将其插入到指定的单元格位置。

灵活性与可扩展性 :此代码结构清晰,易于根据具体需求进行修改和扩展。例如,可以轻松调整图表类型、样式,或者更改图片的插入位置和大小等。

到此这篇关于Python数据可视化之在Excel中插入图表的文章就介绍到这了,更多相关Python Excel插入图表内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python for 循环语句的使用

    Python for 循环语句的使用

    这篇文章主要介绍了Python for 循环语句,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2021-06-06
  • 关于Python中 循环器 itertools的介绍

    关于Python中 循环器 itertools的介绍

    循环器是对象的容器,包含有多个对象。通过调用循环器的next()方法 (__next__()方法,在Python 3.x中),循环器将依次返回一个对象。直到所有的对象遍历穷尽,循环器将举出StopIteration错误。这篇文章将对此做一个详细介绍,感兴趣的小伙伴请参考下面文字内容
    2021-09-09
  • python中使用pymssql库操作MSSQL数据库

    python中使用pymssql库操作MSSQL数据库

    这篇文章主要给大家介绍了关于python中使用pymssql库操作MSSQL数据库的相关资料,最近在学习python,发现好像没有对pymssql的详细说明,于是乎把官方文档学习一遍,重要部分做个归档,方便以后查阅,需要的朋友可以参考下
    2023-08-08
  • python not关键字实例用法

    python not关键字实例用法

    在本篇文章里小编给大家整理的是一篇关于python not关键字实例用法,有兴趣的朋友们可以学习下。
    2021-04-04
  • Python语言技巧之三元运算符使用介绍

    Python语言技巧之三元运算符使用介绍

    现在大部分高级语言都支持“?”这个三元运算符(ternary operator),它对应的表达式如下:condition ? value if true : value if false。很奇怪的是,这么常用的运算符python居然不支持
    2013-03-03
  • python的xpath获取div标签内html内容,实现innerhtml功能的方法

    python的xpath获取div标签内html内容,实现innerhtml功能的方法

    今天小编就为大家分享一篇python的xpath获取div标签内html内容,实现innerhtml功能的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • Python嵌套列表转一维的方法(压平嵌套列表)

    Python嵌套列表转一维的方法(压平嵌套列表)

    今天小编就为大家分享一篇Python嵌套列表转一维的方法(压平嵌套列表),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • Python实现将Excel内容插入到Word模版中

    Python实现将Excel内容插入到Word模版中

    前段时间因为需要处理一大堆验收单,都是一些简单的复制粘贴替换工作,于是就想到用python进行处理。本文分享了用python将excel文件单元格内容插入到word模版中并保存为新文件的办法,希望对大家有所帮助
    2023-03-03
  • 对DataFrame数据中的重复行,利用groupby累加合并的方法详解

    对DataFrame数据中的重复行,利用groupby累加合并的方法详解

    今天小编就为大家分享一篇对DataFrame数据中的重复行,利用groupby累加合并的方法详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • 异步任务队列Celery在Django中的使用方法

    异步任务队列Celery在Django中的使用方法

    对于网站来说,给用户一个较好的体验是很重要的事情,其中最重要的指标就是网站的浏览速度。因此服务端要从各个方面对网站性能进行优化,这篇文章主要介绍了异步任务队列Celery在Django中的使用方法,感兴趣的小伙伴们可以参考一下
    2018-06-06

最新评论