首页 > 编程语言 >Python-pptx学习随笔

Python-pptx学习随笔

时间:2024-07-12 16:52:46浏览次数:14  
标签:pptx Python chart value shape 刻度 随笔 axis

引言

++最近有用到做自动化ppt相关的功能,简单记录一下实现过程的部分操作。++

0 pptx的结构
pptx的存储本质上是一颗树

flowchart LR
    pptx --> slides --> shapes --> 组内shapes
    pptx --> 幻灯片 --> 模块形状 --> 复合形状内部的形状

1 相关操作
1.1 创建一个pptx类

from pptx import Presentation
ppt_model = Presentation(pptx='path')

1.2 访问pptx的每一个幻灯片

# 根据位置取出slide
slide1 = ppt_model.slides[0]
# 访问每一个slide
for slide in ppt_model.slides:
    pass

1.3 访问幻灯片下的形状

shape = shapes[0]
# 遍历每一个shape
for shape in slide.shapes:
    print(shape.text)

[注] 并非所有的shape都有text属性,一般具有文本框的shape才有text属性,图表一般没有

1.4 访问shape下的不同属性
1.4.1 shape.text

shape.text = '文本1'

1.4.2 shape.text_frame
修改此属性下的不同属性可以对text文本进行定制化操作

from pptx.util import Pt, Inches
# 修改文字属性
for paragraph in shape.text_frame.paragraphs:
    for run in paragraph.runs:
        # 设置字体大小为18磅
        run.font.size  = Pt(18)
        # 设置字体为加粗格式
        run.font.bold = True

1.5 chart
1.5.1 创建和删除

from pptx.enum.chart import XL_CHART_TYPE
from pptx.chart.data import ChartData
# 删除当前图表
model.slides[i].shapes._spTree.remove(shape.element)
# 创一个新图表
chart = model.slides[i].shapes.add_chart(
    chart_type=XL_CHART_TYPE.LINE, # 图表类型-折线
    x=left, # 左侧边距
    y=top, # 顶部边距
    cx=width, # 宽度
    cy=height, # 高度
    chart_data=chart_data: ChartData()
)

1.5.2 chart_data

from pptx.chart.data import ChartData
# 创建一个新数据类型
chart_data = ChartData()
# 横轴刻度
chart_data.categories = categories: list[]
# 增加一条线的数据
chart_data.add_series(
    name= name: str,
    values=values: list[],
    number_format=None,
)
# 插入多条数据线
for i in range(k):
    chart_data.add_series(name, values[k])
【注】个人建议先插入数据画图,数据线属性的修改放在后面


1.5.3 CategoryAxis
图表的类别轴。

category_axis = CategoryAxis
# 刻度标记格式修改
tick_labels = category_axis.tick_labels

1.5.4 Y axis
值轴,也就是Y轴的设定

from pptx.enum.chart import XL_TICL_MARK
value_axis = shapes.chart.value_axis
# 设定主刻度线的间隔为0.1
value_axis.major_unit = 0.1

# 设置次刻度线是否隐藏
value_axis.minor_tick_mark = XL_TICL_MARK.NONE

# 网格样式修改
# 主/次要网格线是否可见
value_axis.has_major_gridlines = False
value_axis.has_minor_gridlines = False

# 刻度标记格式修改
value_axis.has_tick_labels = False
# 设定最小刻度
value_axis.minimum_scale = num: float
# 设定最大刻度
value_axis.maximum_scale = num: float
# 设定显示的刻度间隔
value_axis.major_unit = num: float
# 刻度标记的数字格式0.5-1.0-1.5 一旦设定格式显示的刻度间隔会自动匹配格式,如0.8变成1.0
value_axis.tick_labels.number_format='0.5'
# 文字属性
value_axis.tick_labels.font.size=Pt(8)
# 刻度标签与轴之间的距离
value_axis.tick_labels.offset

# 刻度线的形状和颜色-ChartFormat对象实例
format = value_axis.format

1.5.5 tick_labels

1.5.6 chart.legend
修改图例的相关属性

from pptx.enum.chart import XL_LEGEND_POSITION
# 是否显示图列
chart.has_legend = True 
# 图例的字体相关设定
font = chart.legend.font
font.name='Times New Roman'
font.size = Pt(8)
# 图例的位置(默认值位置)
chart.legend.position = XL_LEGEND_POSITION.BOTTOM
# 从图例的默认位置移动,表示为-1.0和1.0之间的浮点数,表示图表宽度的一部分。
chart.legend.horz_offset = -0.1
# 是否在绘图区域放置图例
chart.legend.include_in_layout = True

标签:pptx,Python,chart,value,shape,刻度,随笔,axis
From: https://www.cnblogs.com/mappleyan/p/18298877

相关文章

  • python 内置高級函數盤點
    1. map(function,iterable,...)map()函数接受一个函数和一个可迭代对象作为参数,将函数应用于可迭代对象的每个元素,并返回一个包含结果的迭代器#将列表中的每个元素加1numbers=[1,2,3,4,5]result=map(lambdax:x+1,numbers)print(list(result))#输出[2,3......
  • 发布用flask框架开发的python后端程序到windows服务器
    flask框架开发的python后端程序开发好了后,怎么发布到生产环境呢?以app.run()的方式在生产环境上启动服务,当有异常特别容易退出,而且性能很弱。生产环境下,python常见的web部署搭配是nginx+gunicorn。但是这种搭配只适合在Linux环境下。gunicorn不支持windows环境。如果要搭......
  • 环境部署之在 Linux 服务器上搭建和部署 Python 环境
    背景说明在企业工作中,自动化测试框架落地肯定会集成到Jenkins服务器上做持续集成测试,自动构建以及发送结果到邮箱,实现真正的无人值守测试。不过Jenkins搭建一般都会部署在公司的服务器上,不会在私人电脑里,而服务器大部分都是Linux操作系统的。如果要在Linux上的Jenkins服......
  • 后劲真大,我愿称之为学习python的“圣经”
    很多小伙伴都在学习Python,但是爱看书的找不到适合自己的,这本书可以完美的解决你的问题,还能帮助到很多需要处理数据,做Excel自动方面的。学习数据分析的好处众多,无论是对于个人职业发展还是企业的运营决策都具有重要意义。以下是学习数据分析的主要好处:提高就业竞争力:在信息化......
  • python模块之configparser
    大家看我前面的笔记中,介绍过了专门用于处理日志的logging模块,下面我们来说一下专门处理配置文件的configparser模块。这个模块其实也没什么难度,说到底还是做文件处理用的,做运维的朋友们可以多研究下。来吧,直接上代码:importconfigparserconfig=configparser.ConfigParser()c......
  • 最新随笔
    buzzer.h#ifndefBUZZER_H#defineBUZZER_H//引入必要的头文件#include<stdio.h>#include<unistd.h>#include<stdlib.h>#include<fcntl.h>#include<sys/ioctl.h>//定义常量#definePWM_IOCTL_SET_FREQ1#definePWM_IOCTL_STOP0#def......
  • python中一些特殊方法及含义
    python中一些特殊方法及含义,后期会根据系统学习后修正补充归纳汇总初始化和销毁:__init__(self[,args...])对象初始化,构造函数,在生成对象时调用,简单的调用方法:obj=className(args)初始化方法,在创建对象时进行初始化操作__del__(self)......
  • [1032] SQLAlchemy—the magical bridge between Python and databases!
    Ah,SQLAlchemy—themagicalbridgebetweenPythonanddatabases!......
  • python--实验10 封装,继承,多态
    目录知识点 封装(PART1)继承(PART2)多态(PART3)动态性(PART4)小结知识拓展实验 知识点 封装(PART1)定义:封装是将数据(属性)和行为(方法)组合在一起的过程,通常封装在类中。目的:保护数据不被外部直接访问和修改,提高程序的安全性和可维护性。类和对象:......
  • 毕业设计之python语音数据及标注核对审核系统设计与实现(python完整源码+说明文档+演示
    1项目介绍基于python的语音标注及审核系统的目的就是在于建立属于自己的一套识别系统,在日常的工作中,语音识别是一件非常重要的事情,比如说企业或事业单位当中。自动整理语音数据,保存到数据库当中,实现数据对应一致性,这样可以很大程度地进行数据的校验。2、项目技术项目后......