在 powerpoint 中创建图表是一种高效的数据可视化方式,能够帮助将复杂信息更直观地呈现,提升表达效果。通过 python 实现图表自动化生成,不仅节省时间,还能减少手动操作的错误,提高演示文稿的专业度和制作效率。
本文将介绍如何使用 python 创建多种类型的 powerpoint 图表,包括柱状图、条形图、饼图、折线图、漏斗图和瀑布图。此外,还将展示如何使用 excel 数据生成 powerpoint 图表。
为什么使用 python 创建 powerpoint 图表
使用代码生成 powerpoint 图表有以下优势:
- 自动化:支持定期自动生成图表,减少重复手动操作。
- 动态数据:可基于实时或定期更新的数据源(如数据库或 excel)动态生成图表。
- 无需图形界面:无需安装 microsoft office,也能创建和编辑演示文稿。
- 批量处理:通过简单代码一次性批量生成多个图表或完整演示文稿。
使用工具
要在powerpoint中生成图表,需要使用合适的powerpoint文档处理库。本文所使用的是 spire.presentation for python 库。该库支持创建、编辑和转换 powerpoint 文件,兼容 .ppt 和 .pptx 格式,且不依赖于本地安装的 microsoft powerpoint 软件。
安装方法
在项目终端中执行以下命令,安装 spire.presentation 库:
pip install spire.presentation
安装完成后,即可在 python 脚本中导入 spire.presentation,开始创建和操作 powerpoint图表。
使用 python 在 powerpoint 中创建各类图表
spire.presentation 支持多种图表类型,包括以下各种常见的类型:
- 柱状图(column chart)
- 条形图(bar chart)
- 饼图(pie chart)
- 环形图(doughnut chart)
- 折线图(line chart)
- 面积图(area chart)
- 散点图(scatter chart)
- 股票图(stock chart)
- 气泡图(bubble chart)
- 雷达图(radar chart)
- 漏斗图(funnel chart)
- 瀑布图(waterfall chart)
- 箱线图(box and whisker chart)
- 直方图(histogram chart)
- 帕累托图(pareto chart)
- 矩阵树图(treemap chart)
- 旭日图(sunburst chart)
- 地图图表(map chart)
使用 python 在 powerpoint 中创建图表的实现步骤
- 创建 presentation 对象
- 获取目标幻灯片
- 使用 appendchart() 方法插入所需类型的图表
- 填充图表数据
- 设置图表样式(颜色、图例、标题等)
- 保存演示文稿
柱状图
柱状图通过垂直柱形来展示各类别的数据大小,是对比不同分类或时间段数据的理想选择。常用于展示季度销售、年度增长、产品对比等。
以下代码展示了如何使用python在powerpoint中生成柱状图:
from spire.presentation import * # 创建演示文稿对象 presentation = presentation() # 获取第一张幻灯片 slide = presentation.slides[0] # 添加簇状柱状图,设置图表的位置和尺寸 chart = slide.shapes.appendchart(charttype.columnclustered, rectanglef.fromltrb(100, 80, 620, 440)) # 设置系列标签(季度) chart.chartdata[0, 1].text = "第一季度" chart.chartdata[0, 2].text = "第二季度" chart.chartdata[0, 3].text = "第三季度" # 设置分类标签(地区) chart.chartdata[1, 0].text = "北美" chart.chartdata[2, 0].text = "欧洲" chart.chartdata[3, 0].text = "亚洲" chart.chartdata[4, 0].text = "南美" # 定义三个系列的销售数据(每列代表一个季度,每行为不同地区的销售额) series_data = { "系列1": [20000, 22000, 18000, 30000], "系列2": [15000, 26000, 20000, 26000], "系列3": [17000, 24000, 22000, 28000] } # 向图表中填充数据 for i, (key, values) in enumerate(series_data.items()): for j, val in enumerate(values): chart.chartdata[j + 1, i + 1].numbervalue = val # 设置系列标签(即图例中显示的系列名称,b1 至 d1 区域) chart.series.serieslabel = chart.chartdata["b1", "d1"] # 设置分类轴标签(即横轴显示的地区名称,a2 至 a5 区域) chart.categories.categorylabels = chart.chartdata["a2", "a5"] # 分别设置每个系列对应的数值区域 chart.series[0].values = chart.chartdata["b2", "b5"] chart.series[1].values = chart.chartdata["c2", "c5"] chart.series[2].values = chart.chartdata["d2", "d5"] # 设置柱状图中柱形之间的间距和重叠程度 chart.gapwidth = 219 # 负值表示柱子之间有间隙,不重叠 chart.overlap = -27 # 设置图例位置为底部 chart.chartlegend.position = chartlegendpositiontype.bottom # 设置图表标题 chart.hastitle = true chart.charttitle.textproperties.text = "季度销售表现" chart.charttitle.textproperties.iscentered = true chart.charttitle.textproperties.paragraphs[0].defaultcharacterproperties.isbold = tristate.tfalse chart.charttitle.height = 25 # 保存为pptx文件并释放资源 presentation.savetofile("柱状图.pptx", fileformat.pptx2016) presentation.dispose()
条形图
条形图的结构类似于柱状图,但数据以水平条形呈现,更适合类目名称较长的场景。条形图常用于横向对比,如各地区人口、部门预算等。
以下代码展示了如何使用python在powerpoint中生成条形图:
from spire.presentation import * # 创建演示文稿对象 presentation = presentation() # 获取第一张幻灯片 slide = presentation.slides[0] # 向幻灯片中添加一个簇状条形图 chart = slide.shapes.appendchart(charttype.barclustered, rectanglef.fromltrb(100, 80, 620, 440)) # 定义类别名称(水果名称)和每年的数据 categories = ["苹果", "香蕉", "樱桃", "椰枣"] series_data = { "2019年": [500, 700, 600, 400], "2020年": [600, 800, 700, 450] } # 设置图表的类别标签(位于第一列) for i, cat in enumerate(categories, start=1): chart.chartdata[i, 0].text = cat # 设置图表的系列名称(位于第一行) for i, series_name in enumerate(series_data.keys(), start=1): chart.chartdata[0, i].text = series_name # 填充图表数据区域的值 for col_idx, values in enumerate(series_data.values(), start=1): for row_idx, val in enumerate(values, start=1): chart.chartdata[row_idx, col_idx].numbervalue = val # 设置系列标签区域(b1 到 c1) chart.series.serieslabel = chart.chartdata["b1", "c1"] # 设置类别标签区域(a1 到 a4) chart.categories.categorylabels = chart.chartdata["a1", "a4"] # 设置每个系列对应的数据区域(数值区域) chart.series[0].values = chart.chartdata["b2", "b5"] chart.series[1].values = chart.chartdata["c2", "c5"] # 定义每个系列的填充颜色 fill_colors = [ color.fromrgb(91, 155, 213), # 系列 1(蓝色) color.fromrgb(237, 125, 49), # 系列 2(橙色) ] # 设置系列填充样式为纯色,并应用定义的颜色 for index, color in enumerate(fill_colors): chart.series[index].fill.filltype = fillformattype.solid chart.series[index].fill.solidcolor.color = color # 保存演示文稿到文件 presentation.savetofile("条形图.pptx", fileformat.pptx2010) presentation.dispose()
饼图
饼图用于表示整体中各部分的比例关系,通过扇形展示各数据项所占的百分比。适用于展示市场份额、预算分配等组成结构。
以下代码展示了如何使用python在powerpoint中生成饼图:
from spire.presentation import * # 创建 presentation 对象并获取第一张幻灯片 presentation = presentation() slide = presentation.slides[0] # 向幻灯片中添加一个饼图,指定图表类型和位置大小 chart = slide.shapes.appendchart(charttype.pie, rectanglef.fromltrb(150, 150, 450, 450)) # 定义图表的分类和对应的数值 categories = ["chrome", "firefox", "edge", "safari"] values = [58.9, 13.3, 12.7, 9.6] # 填充图表数据区域: # a1:a4 单元格用于表示分类(浏览器名称) # b1:b4 单元格用于表示对应的市场份额数值 for i in range(len(categories)): chart.chartdata[i + 1, 0].text = categories[i] chart.chartdata[i + 1, 1].numbervalue = values[i] # 设置分类标签范围为 a2:a5,数据值范围为 b2:b5 chart.categories.categorylabels = chart.chartdata["a2", "a5"] chart.series[0].values = chart.chartdata["b2", "b5"] # 设置图表标题内容、居中样式和标题高度 chart.hastitle = true chart.charttitle.textproperties.text = "浏览器市场份额" chart.charttitle.textproperties.iscentered = true chart.charttitle.height = 25 # 保存为 powerpoint 文件并释放资源 presentation.savetofile("饼图.pptx", fileformat.pptx2010) presentation.dispose()
折线图
折线图通过连接各数据点的线段,展示数据随时间的变化趋势。适合用于时间序列数据,如年度营收变化、网站流量趋势等。
以下代码展示了如何使用python在powerpoint中生成折线图:
from spire.presentation import * # 创建 presentation 对象并获取第一张幻灯片 presentation = presentation() slide = presentation.slides[0] # 向幻灯片中添加一个折线图,指定图表在幻灯片中的位置和大小 chart = slide.shapes.appendchart(charttype.line, rectanglef.fromltrb(100, 80, 620, 440)) # 定义图表的类别 categories = ["一月", "二月", "三月", "四月"] # 定义两个系列的数据,表示两个产品在不同月份的销量 series_data = { "产品 a": [150, 200, 180, 220], "产品 b": [120, 140, 160, 180] } # 设置图表的类别标签 for i, cat in enumerate(categories, start=1): chart.chartdata[i, 0].text = cat # 设置系列名称 for i, name in enumerate(series_data.keys(), start=1): chart.chartdata[0, i].text = name # 填充系列数据 for col_idx, values in enumerate(series_data.values(), start=1): for row_idx, val in enumerate(values, start=1): chart.chartdata[row_idx, col_idx].numbervalue = val # 指定系列标签的范围(b1 到 c1) chart.series.serieslabel = chart.chartdata["b1", "c1"] # 指定类别标签的范围(a2 到 a5) chart.categories.categorylabels = chart.chartdata["a2", "a5"] # 为每个系列分别设置数据范围(b2:b5 和 c2:c5) chart.series[0].values = chart.chartdata["b2", "b5"] chart.series[1].values = chart.chartdata["c2", "c5"] # 添加图表标题 chart.hastitle = true chart.charttitle.textproperties.text = "各产品月度销售趋势" chart.charttitle.textproperties.iscentered = true chart.charttitle.height = 25 # 保存为 powerpoint 文件并释放资源 presentation.savetofile("折线图.pptx", fileformat.pptx2010) presentation.dispose()
漏斗图
漏斗图用于表示某一流程的逐步转化情况,例如销售漏斗、用户转化路径等。它能清晰展现各阶段的数量递减关系,帮助识别流程中流失严重的环节。
以下代码展示了如何使用python在powerpoint中生成漏斗图:
from spire.presentation import * # 创建 presentation 对象并获取第一张幻灯片 presentation = presentation() slide = presentation.slides[0] # 向幻灯片添加一个漏斗图,设置图表在页面中的位置和大小 chart = slide.shapes.appendchart(charttype.funnel, rectanglef.fromltrb(100, 100, 600, 400)) # 定义漏斗各阶段的名称和对应的数值 stages = ["潜在客户", "销售机会", "报价方案", "成交客户"] values = [1000, 600, 300, 120] # 填充图表数据区域 for i in range(len(stages)): chart.chartdata[i + 1, 0].text = stages[i] chart.chartdata[i + 1, 1].numbervalue = values[i] # 设置图表的分类标签和系列值 chart.categories.categorylabels = chart.chartdata["a2", "a5"] chart.series[0].values = chart.chartdata["b2", "b5"] # 添加图表标题并设置样式 chart.hastitle = true chart.charttitle.textproperties.text = "销售漏斗阶段" chart.charttitle.textproperties.iscentered = true chart.charttitle.height = 25 # 保存演示文稿并释放资源 presentation.savetofile("漏斗图.pptx", fileformat.pptx2010) presentation.dispose()
瀑布图
瀑布图展示数值的累计过程,适用于拆解整体变化的构成因素。常用于财务数据分析,如利润构成、成本变化等,能直观反映每一步对最终结果的影响。
以下代码展示了如何使用python在powerpoint中生成瀑布图:
from spire.presentation import * # 创建 presentation 对象并获取第一张幻灯片 presentation = presentation() slide = presentation.slides[0] # 在幻灯片中添加瀑布图,设置图表在幻灯片中的位置和大小 chart = slide.shapes.appendchart(charttype.waterfall, rectanglef.fromltrb(100, 100, 600, 400)) # 定义各阶段名称和对应的数值 categories = ["起始", "收入", "成本", "利润"] values = [0, 8000, -3000, 5000] # 向图表中填充数据 for i in range(len(categories)): chart.chartdata[i + 1, 0].text = categories[i] chart.chartdata[i + 1, 1].numbervalue = values[i] # 设置类别标签范围 chart.categories.categorylabels = chart.chartdata["a2", "a5"] # 设置系列对应的数值范围 chart.series[0].values = chart.chartdata["b2", "b5"] # 设置图表标题 chart.hastitle = true chart.charttitle.textproperties.text = "利润构成分析" chart.charttitle.textproperties.iscentered = true chart.charttitle.height = 25 # 保存演示文稿并释放资源 presentation.savetofile("瀑布图.pptx", fileformat.pptx2010) presentation.dispose()
使用 python 和 excel 数据生成 powerpoint 图表
通过将 excel 中的数据导入 powerpoint 来生成图表,可以实现数据与演示内容的自动同步更新,避免手动复制粘贴的繁琐和错误,确保演示文稿中的信息始终反映最新的业务数据。这种方法特别适用于需要定期汇报销售、财务、市场等数据的场景,大幅提升数据处理效率和报告的专业度。
第一步:使用 pandas 读取 excel 数据
pandas 是 python 中强大的数据处理库,可以方便地读取和操作 excel 文件。首先确保安装 pandas 库:
pip install pandas
安装完成后,利用 pandas 将 excel 中指定工作表的数据加载到 dataframe 结构中,这样就可以方便地访问和操作表格内容。
import pandas as pd # 读取 excel 文件中名为 'sheet1' 的工作表 df = pd.read_excel('销售数据.xlsx', sheet_name='sheet1')
dataframe 是一个二维表格结构,类似于 excel 的工作表,便于进行后续的数据筛选、计算与传递。
第二步:创建 powerpoint 图表并填充 excel 数据
借助 spire.presentation 库,可以在 powerpoint 幻灯片中动态创建图表,并将刚刚读取的 excel 数据填充进去,实现图表的自动生成。
from spire.presentation import * # 创建演示文稿对象并获取第一张幻灯片 presentation = presentation() slide = presentation.slides[0] # 向幻灯片中添加一个簇状柱形图 chart = slide.shapes.appendchart(charttype.columnclustered, rectanglef.fromltrb(100, 80, 620, 440)) # 设置系列名称 quarters = df.columns[1:].tolist() for i, quarter in enumerate(quarters, start=1): chart.chartdata[0, i].text = quarter # 设置分类标签 regions = df[df.columns[0]].tolist() for i, region in enumerate(regions, start=1): chart.chartdata[i, 0].text = region # 填充图表数据 for i in range(len(regions)): for j in range(len(quarters)): chart.chartdata[i + 1, j + 1].numbervalue = df.iloc[i, j + 1] # 设置系列名称的单元格范围(b1 到 d1) chart.series.serieslabel = chart.chartdata["b1", "d1"] # 设置分类标签的单元格范围(a2 到 a4) chart.categories.categorylabels = chart.chartdata["a2", f"a{len(regions)+1}"] # 设置每个系列的数值区域(b2:b4、c2:c4、d2:d4) for i in range(len(quarters)): col_letter = chr(66 + i) # b、c、d... start_cell = f"{col_letter}2" end_cell = f"{col_letter}{len(regions)+1}" chart.series[i].values = chart.chartdata[start_cell, end_cell] # 设置图表标题 chart.hastitle = true chart.charttitle.textproperties.text = "各地区季度销售额" chart.charttitle.textproperties.iscentered = true chart.charttitle.height = 25 # 保存演示文稿 presentation.savetofile("各地区季度销售图.pptx", fileformat.pptx2010) presentation.dispose()
总结
利用 python 实现 powerpoint 图表的自动化生成,能够显著提升数据可视化的效率与一致性,帮助用户快速制作专业且易于理解的演示内容。本文介绍了如何在ppt中生成多种常用的图表类型,如柱状图、条形图、饼图、折线图、漏斗图和瀑布图等,并展示了如何从 excel 读取数据填充图表。
除了本文例子中展示的图表类型,你还可以尝试很多其他图表,如雷达图、箱线图等,以满足不同的数据展示需求。
以上就是使用python创建powerpoint各种图表的详细教程的详细内容,更多关于python创建powerpoint图表的资料请关注代码网其它相关文章!
发表评论