首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
引言:Python操作PPT
新建和保存PPT
打开PPT文档
ppt与pptx格式转换
设置长度单位
操作幻灯片
幻灯片布局
新建幻灯片
幻灯片位置
获取幻灯片
删除幻灯片
PPT中的形状介绍
获取形状
添加形状
形状填充色
形状边框
占位符介绍
获取占位符
占位符类型
填充占位符
操作文本介绍
获取文本框
添加文本框
添加文本
段落样式
Run样式
文本框样式
添加图表
柱状图
折线图
散点图
饼图
占位符图表
操作表格
插入表格
读取表格
占位符表格
表格对象
行列对象
访问单元格
单元格文本
单元格样式
合并单元格
拆分单元格
操作图片
当前位置:
首页>>
技术小册>>
Python与办公-玩转PPT
小册名称:Python与办公-玩转PPT
柱状图应该是最常用的图表了,比如说要在幻灯片页面上添加某超市某一年的四个季度不同类别产品的销售量的柱状图。我就直接上代码了: ```bash from pptx import Presentation from pptx.chart.data import CategoryChartData from pptx.enum.chart import XL_CHART_TYPE from pptx.util import Cm ppt = Presentation() chart_data = CategoryChartData() chart_data.categories = ['数码娱乐','生活用品','文化用品'] chart_data.add_series('Q1',(36.6,65.5,10.0)) chart_data.add_series('Q2',(21.1,52.1,3.1)) chart_data.add_series('Q3',(15.9,22.3,9.8)) chart_data.add_series('Q4',(20.4,35.3,3.2)) slide = ppt.slides.add_slide(ppt.slide_layouts[6]) x = y = Cm(3) width = Cm(20) height = Cm(10) graphic_frame = slide.shapes.add_chart( XL_CHART_TYPE.COLUMN_CLUSTERED,x,y,width,height,chart_data ) ppt.save("./ppt_ files/test.pptx") ``` 在上面的代码中,在距离页面左边和上边都是3厘米的位置上,添加了一个宽度为20厘米、高度为10厘米的柱状图,柱状图的类型用XL_CHART_TYPE.COLUMN_CLUSTERED表示。如果想知道其他图表的类型,可以打印XL_CHART_TYPE这个枚举类,这种操作我已经演示过好几次了,这里就不上代码了,参考以前的代码试一下吧。 存储柱状图数据的是一个CategoryChartData对象,它的categories属性存储的是类别,对应x轴的标签,我们给它一个列表就行了。调用CategoryChartData对象的add_series()方法可以添加数据系列,要添加几组数据就调用几次。 执行上面的代码之后我们就可以得到一个柱状图了,这个柱状图的样式是未经修改的默认样式,如图8-3所示。 ![](/uploads/images/20231205/c235238b1121c1353cb7f5f85035efc6.png) 默认的样式好像太简单了,也许你还有更多的需求,比如说修改它的坐标轴,尤其是x轴和y轴的标签,修改x轴和y轴的代码如下: ```bash from pptx import Presentation from pptx.chart.data import CategoryChartData from pptx.enum.chart import XL_CHART_TYPE,XL_TICK_MARK from pptx.util import Cm,Pt ppt = Presentation() ... graphic_frame = slide.shapes.add_chart( XL_CHART_TYPE.COLUMN_CLUSTERED,x,y,width,height,chart_data ) chart = graphic_frame.chart # 获取分类,即获取x轴 category_axis = chart.category_axis # 不同分类用竖线隔开 # category_axis.has_major_gridlines = True # x轴标签字体样式 # category_axis.tick_labels.font.italic = True # category_axis.tick_labels.font.size = Pt(15) # 获取y轴 value_axis = chart.value_axis # y轴最大刻度,不设置则自动调整 # value_axis.maximum_scale = 100 # y轴小刻度方向,INSIDE朝内,OUTSIDE朝外 # value_axis.minor_tick_mark = XL_TICK_MARK.INSIDE # 显示y轴小刻度线 # value_axis.has_minor_gridlines = True # 获取y轴标签 tick_labels = value_axis.tick_labels # y轴标签格式化 tick_labels.number_format = '0"万"' # y轴标签字体样式 # tick_labels.font.bold = True tick_labels.font.size = Pt(15) ppt.save("./ppt_ files/test.pptx") ``` 我们调用SlideShapes的add_chart()方法得到的是一个GraphicFrame对象,访问它的chart属性就能拿到图表对象了,也就是Chart对象。访问Chart对象的category_axis属性可以拿到它的标签信息,其实就是x轴,然后就可以修改分类的分隔线、字体等样式了,它的字体存储在x轴的标签上,访问tick_labels属性即可拿到标签。 访问Chart对象的value_axis属性可以获取到y轴,再访问一下y轴的tick_labels属性就可以拿到y轴的标签了,修改字体等操作都很容易。上面修改样式的代码被我注释了一部分,因为如果这些样式都设置了,图表就会显得很乱,但我在主要代码上方都写好注释了,自己动手跟着操作一遍看看具体的效果,上面的代码执行之后的效果如图8-4所示。 ![](/uploads/images/20231205/6ecd86b930b360b53dbe968295350ed3.png) 除了修改坐标轴的标签,也许还需要添加一些图例,不然也不知道哪个颜色的柱子代表哪个季度啊。添加图例很简单,代码如下: ```bash from pptx import Presentation from pptx.chart.data import CategoryChartData from pptx.enum.chart import XL_CHART_TYPE,XL_LEGEND_POSITION from pptx.util import Cm,Pt ppt = Presentation() ... graphic_frame = slide.shapes.add_chart( XL_CHART_TYPE.COLUMN_CLUSTERED,x,y,width,height,chart_data ) chart = graphic_frame.chart # 添加图例 chart.has_legend = True # 图例位置 chart.legend.position = XL_LEGEND_POSITION.TOP # 图例是否在图表里 chart.legend.include_in_layout = False ppt.save("./ppt_ files/test.pptx") ``` 执行完上面的代码之后,打开文档看看,就会发现这个柱状图有图例了,如图8-5所示。 ![](/uploads/images/20231205/48c81896130662c4efb4c1731ee01c88.png) 添加图例,首先要把Chart对象的has_legend属性改为True,然后再设置一下它的位置就可以了。图例的位置可以位于图表的上下左右四个方向,比如说XL_LEGEND_POSITION.TOP表示把图例放在图表的顶部,因为TOP就是指上边嘛,其他的方向也容易猜到,无非就是BOTTOM、LEFT、RIGHT,可以自己动手尝试。 特别说明一下,给柱状图设置坐标轴样式的写法,在其他有坐标轴的图表类型中同样适用,至于图例的写法,基本上对常用的图表类型都适用,不过任何时候都不要把话说太满,反正具体情况具体分析吧。
上一篇:
添加图表
下一篇:
折线图
该分类下的相关小册推荐:
Python3网络爬虫开发实战(下)
Python合辑8-变量和运算符
Python合辑3-字符串用法深度总结
剑指Python(磨刀不误砍柴工)
Python神经网络入门与实践
剑指Python(万变不离其宗)
Python编程轻松进阶(一)
Python编程轻松进阶(二)
Python合辑10-函数
机器学习算法原理与实战
实战Python网络爬虫
Python甚础Django与爬虫