利用Python将Matplotlib可视化插入到Excel表格中
本文详解如何利用Python的xlwings库将Matplotlib生成的可视化图表无缝插入Excel文件。通过读取数据、绘制RadViz径向坐标图,并使用picture对象的add()方法指定位置与尺寸,实现数据与图表的一体化展示,适用于需要自动化生成Excel报告的场景。
前言:
在日常办公与数据分析中,Excel常被用于数据存储,Tableau等BI工具用于处理及可视化展示。同时,我们也常借助R或Python编写代码,生成高质量且美观的数据图表。
然而,如何将这种“优雅”的可视化效果延伸至Excel环境中呢?尽管Python拥有众多绘图库,本文仍以基础且常用的Matplotlib为例进行说明。

本文将演示如何将Matplotlib生成的可视化图片嵌入到Excel文件中。
此方法同样适用于其他可视化库生成的图像。
数据可视化
目前Python中操作Excel的库包括xlrd、xlwt、openpyxl和xlwings等。本文选用xlwings模块来控制Excel并插入图表。
首先,利用Pandas模块读取数据,并随机预览前5行。
import pandas as pd
df = pd.read_excel('可视化数据.xlsx')
df.sample(5)输出:

读取数据后,即可使用matplotlib进行可视化处理。此处引用《Python 数据可视化之美》中的示例。
import numpy as np
from pandas.plotting import radviz
import matplotlib.pyplot as plt
angle = np.arange(360)/180*3.14159
x = np.cos(angle)
y = np.sin(angle)
figure = plt.figure(figsize=(3.5, 3.5), dpi=100)
ax = radviz(df, 'variety', color=['#FC0000', '#F0AC02', '#009E88'], edgecolors='k', marker='o', s=34, linewidths=1)
plt.plot(x, y, color='gray')
plt.axis('off')
plt.legend(loc="center", bbox_to_anchor=(1.1, 0, 0, 0.4), edgecolor='none', facecolor='none', title='Group')输出:

上述代码生成的图形为RadViz图(径向坐标可视化)。RadViz可视化原理[2]是一种将多维空间数据点通过非线性方法映射至二维空间的可视化技术,其设计思想基于圆形平行坐标系。
图表插入Excel
在xlwings库中,实现图表插入Excel的核心在于调用picture对象的add()方法。
该方法包含几个关键参数,具体见下表:
| 参数名 | 释义用法 |
|---|---|
| image | 文件路径或Matplotlib图形对象。 |
| left | 以磅为单位距离左侧边缘的位置,默认为0。 |
| top | 以磅为单位距离上侧边缘的位置,默认为0。 |
| width | 设置图宽。 |
| height | 设置图高。 |
| name | Excel图片名称。如果未提供,则默认为Excel标准名称。 |
| update | 替换更新图片。 |
| scale | 缩放尺度。 |
在交互式环境中执行以下命令:
import xlwings as xw
app = xw.App(visible=False, add_book=False)
wb = app.books.open('可视化数据.xlsx')
sheet = wb.sheets[0] # 选择第1个工作表
sheet.pictures.add(figure) # 插入图表
wb.save("可视化数据-新.xlsx")
wb.close()
app.quit()上述代码中,核心操作仅一行,其余均为打开、保存及关闭Excel文件的流程。这是因为xlwings直接操作工作表单元格需经过多层对象结构,
具体层级关系如下图所示:

最后,打开生成的Excel文件,可见Matplotlib绘制的图表已与原始数据并列展示。

至此,我们成功实现了将Matplotlib可视化图片插入到Excel表格中。
到此这篇关于利用python将 Matplotlib 可视化 插入到 Excel 表格中的文章就介绍到这了,更多相关Matplotlib 插入 Excel 表格内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













