2W+字系统讲解如何用Python自动化操作PPT,学懂这篇文章就够了

2023-11-06

大家好,之前给大家分享过用Python办公自动化系列:Python 自动化操作Excel、PDF,今天给大家分享用Python自动化操作PPT,本文内容较长,喜欢记得关注、收藏、点赞。

【注】文末提供资料和交流方式

1.PPT自动化能干什么?有什么优势?

  • 它可以代替你自动制作PPT

  • 它可以减少你调整用于调整PPT格式的时间

  • 它可以让数据报告风格一致

  • 总之就是:它能提高你的工作效率!让你有更多时间去做其他事情!

2.使用win32com操作ppt

官方文档:https://docs.microsoft.com/zh-cn/office/vba/api/powerpoint.shape.copy

2.1 pip安装win32com

pip install pypiwin32

由于我已经安装过了,这里提示已经安装

图片

2.2 win32com复制ppt模板

有时候我们需要对ppt的模板进行复制,然后再添加相应内容,由于python-pptx对复制模板也没有很好的支持(我没找到~忧伤),所以我们用win32com对模板页进行复制,然后再用python-pptx增加ppt内容。

参考官方文档:https://docs.microsoft.com/zh-cn/office/vba/api/powerpoint.slide.copy

图片

先准备好一张模板: 2.2 win32 ppt测试.pptx

图片

示例代码:

import win32com
from win32com.client import Dispatch
import os

ppt = Dispatch('PowerPoint.Application')
# 或者使用下面的方法,使用启动独立的进程:
# ppt = DispatchEx('PowerPoint.Application')

# 如果不声明以下属性,运行的时候会显示的打开word
ppt.Visible = 1  # 后台运行
ppt.DisplayAlerts = 0  # 不显示,不警告

# 创建新的PowerPoint文档
# pptSel = ppt.Presentations.Add() 
# 打开一个已有的PowerPoint文档
pptSel = ppt.Presentations.Open(os.getcwd() + \\ + 2.2 win32 ppt测试.pptx)

# 复制模板页
pptSel.Slides(1).Copy()
#设置需要复制的模板页数
pageNums = 10
# 粘贴模板页
for i in range(pageNums):
    pptSel.Slides.Paste()

# pptSel.Save()  # 保存
pptSel.SaveAs(os.getcwd() + \\ + win32_copy模板.pptx)  # 另存为
pptSel.Close()  # 关闭 PowerPoint 文档
ppt.Quit()  # 关闭 office

效果如下:

图片

图片

3.python-pptx 创建PPT、复制页面

官方文档:https://python-pptx.readthedocs.io/en/latest/

3.1 pip安装python-pptx

安装方法:

pip install python-pptx

我已经安装过了,故提示已经安装

图片

3.2 python-pptx 复制页面

使用python-pptx进行复制没有找到合适的方法,有以下两种解决办法:

  1. 使用win32com对ppt模板进行复制

  2. 增加模板ppt数量,然后使用python-pptx对不需要的模板页进行删减操作

3.3 python-pptx 删除页面

python-pptx 多页待删除模板.pptx:

图片

示例代码:

from pptx import Presentation

# 删除某一页ppt
def del_slide(prs,index):
    slides = list(prs.slides._sldIdLst)
    prs.slides._sldIdLst.remove(slides[index])

# 3.3 python-pptx 删除页面
def fun3_3():
    # 打开ppt
    ppt = Presentation('python-pptx 多页待删除模板.pptx')

    # 获取所有页
    slides = ppt.slides
    number_pages = len(slides)
    print(删除前ppt一共,number_pages,页面)

    # 设置需要删除的页面数量
    delPageNums = 3
    # 进行删除操作(每次都删除第一张ppt)
    for index in range(delPageNums):
        del_slide(ppt,0)

    # 再次获取所有页
    slides = ppt.slides
    number_pages = len(slides)
    print(删除后ppt一共,number_pages,页面)

    ppt.save('python-pptx 多页已删除模板.pptx')
    print('生成完毕')

if __name__ == '__main__':
    fun3_3()

执行效果:

图片

图片

3.4 新建页面

示例代码:

from pptx import Presentation

# 新建ppt
ppt = Presentation()

# 新建页面
slide = ppt.slides.add_slide(ppt.slide_layouts[0])

# 保存ppt
ppt.save('新建ppt.pptx')

效果如下:

图片

图片

4.python-pptx 插入文字、表格、形状并设置样式

模板ppt:

图片

图片

接下来,我们就在此模板上进行我们的操作演示

4.1 python-pptx 添加文字并设置样式

4.1.1 添加单行文字与多行文字

示例代码:

from pptx import Presentation
from pptx.util import Pt,Cm

# 打开已存在ppt
ppt = Presentation('4. python-pptx操作模板.pptx')

# 设置添加到当前ppt哪一页
n_page = 0
singleLineContent = 我是单行内容
multiLineContent = \
我是多行内容1
我是多行内容2
我是多行内容3


# 获取需要添加文字的页面对象
slide = ppt.slides[n_page]

# 添加单行内容

# 设置添加文字框的位置以及大小
left, top, width, height = Cm(16.9), Cm(1), Cm(12), Cm(1.2)
# 添加文字段落
new_paragraph1 = slide.shapes.add_textbox(left=left, top=top, width=width, height=height).text_frame
# 设置段落内容
new_paragraph1.paragraphs[0].text = singleLineContent
# 设置文字大小
new_paragraph1.paragraphs[0].font.size = Pt(15)


# 添加多行

# 设置添加文字框的位置以及大小
left, top, width, height = Cm(16.9), Cm(3), Cm(12), Cm(3.6)
# 添加文字段落
new_paragraph2 = slide.shapes.add_textbox(left=left, top=top, width=width, height=height).text_frame
# 设置段落内容
new_paragraph2.paragraphs[0].text = multiLineContent
# 设置文字大小
new_paragraph2.paragraphs[0].font.size = Pt(15)


# 保存ppt
ppt.save('4.1 添加文字.pptx')

效果如下:

图片

4.1.2 设置文字框样式与文字样式

示例代码:

from pptx import Presentation
from pptx.util import Pt,Cm
from pptx.dml.color import RGBColor
from pptx.enum.text import MSO_VERTICAL_ANCHOR, PP_PARAGRAPH_ALIGNMENT
from pptx.enum.text import PP_ALIGN


# 打开已存在ppt
ppt = Presentation('4. python-pptx操作模板.pptx')

# 获取需要添加文字的页面对象
slide = ppt.slides[0]

# 设置添加文字框的位置以及大小
left, top, width, height = Cm(16.9), Cm(1), Cm(12), Cm(1.2)
# 添加文字框 slide.shapes.add_textbox(距离左边,距离顶端,宽度,高度)
textBox = slide.shapes.add_textbox(left=left, top=top, width=width, height=height)

# 调整文本框背景颜色
textBoxFill = textBox.fill
textBoxFill.solid()  # 纯色填充
textBoxFill.fore_color.rgb = RGBColor(187, 255, 255)

# 文本框边框样式调整
line = textBox.line
line.color.rgb = RGBColor(0, 255, 0)
line.width = Cm(0.1)

# 获取文本框对象
tf = textBox.text_frame

# 文本框样式调整
tf.margin_bottom = Cm(0.1)  # 下边距
tf.margin_left = 0  # 左边距
tf.vertical_anchor = MSO_VERTICAL_ANCHOR.BOTTOM  # 对齐文本方式:底端对齐
tf.word_wrap = True  # 文本框的文字自动对齐

# 设置内容
tf.paragraphs[0].text = '这是一段文本框里的文字'

# 字体样式调整
tf.paragraphs[0].alignment = PP_ALIGN.CENTER  # 对齐方式
tf.paragraphs[0].font.name = '微软雅黑'  # 字体名称
tf.paragraphs[0].font.bold = True  # 是否加粗
tf.paragraphs[0].font.italic = True  # 是否斜体
tf.paragraphs[0].font.color.rgb = RGBColor(255, 0, 0)  # 字体颜色
tf.paragraphs[0].font.size = Pt(20)  # 字体大小

# 保存ppt
ppt.save('4.1.2 设置文字框与字体样式.pptx')

效果如下:

图片

代码详解

  • 添加文本框

    # 添加文字框 slide.shapes.add_textbox(距离左边,距离顶端,宽度,高度)
    textBox = slide.shapes.add_textbox(left=left, top=top, width=width, height=height)
    
  • 设置文本框背景

    # 调整文本框背景颜色
    textBoxFill = textBox.fill
    textBoxFill.solid()  # 纯色填充
    textBoxFill.fore_color.rgb = RGBColor(187, 255, 255)
    

    RGB颜色参考:http://www.wahart.com.hk/rgb.htm

  • 设置文本框边框样式

    # 文本框边框样式调整
    line = textBox.line
    line.color.rgb = RGBColor(0, 255, 0)
    line.width = Cm(0.1)
    
  • 设置文本框文字样式

    # 获取文本框文字对象
    tf = textBox.text_frame
    
    # 文本框样式调整
    tf.margin_bottom = Cm(0.1)  # 下边距
    tf.margin_left = 0  # 左边距
    tf.vertical_anchor = MSO_VERTICAL_ANCHOR.BOTTOM  # 垂直方式:底端对齐
    tf.word_wrap = True  # 文本框的文字自动对齐
    

    指定文本在文本框架中的垂直对齐方式。与TextFrame对象的.vertical_anchor属性一起使用。请注意,vertical_anchor属性也可以具有值None,表示没有直接指定的垂直锚设置,并且其有效值是从占位符继承的(如果有一个或从主题继承)。也可以不指定任何内容来删除明确指定的垂直锚设置。

    from pptx.enum.text import MSO_ANCHOR
    
    cell = table.cell(row_idx=2, col_idx=3)
    cell.vertical_anchor = MSO_ANCHOR.BOTTOM
    

    图片

    TOP
    	Aligns text to top of text frame and inherits its value from its layout placeholder or theme.
    MIDDLE
    	Centers text vertically
    BOTTOM
    	Aligns text to bottom of text frame
    MIXED
    	Return value only; indicates a combination of the other states.
    
  • 垂直对齐

  • 设置文本框内容

    # 设置内容
    tf.paragraphs[0].text = '这是一段文本框里的文字'
    
  • 字体样式调整

    # 字体样式调整
    tf.paragraphs[0].alignment = PP_ALIGN.CENTER  # 对齐方式
    tf.paragraphs[0].font.name = '微软雅黑'  # 字体名称
    tf.paragraphs[0].font.bold = True  # 是否加粗
    tf.paragraphs[0].font.italic = True  # 是否斜体
    tf.paragraphs[0].font.color.rgb = RGBColor(255, 0, 0)  # 字体颜色
    tf.paragraphs[0].font.size = Pt(20)  # 字体大小
    
    
    from pptx.enum.text import PP_ALIGN
    
    shape.paragraphs[0].alignment = PP_ALIGN.CENTER
    

    图片

  • 文字对齐

  CENTER
  	Center align
  DISTRIBUTE
  	Evenly distributes e.g. Japanese characters from left to right within a line
  JUSTIFY
  	Justified, i.e. each line both begins and ends at the margin with spacing between words adjusted such that the line exactly fills the width of the paragraph.
  JUSTIFY_LOW
  	Justify using a small amount of space between words.
  LEFT
  	Left aligned
  RIGHT
  	Right aligned
  THAI_DISTRIBUTE
  	Thai distributed
  MIXED
  	Return value only; indicates multiple paragraph alignments are present in a set of paragraphs.
  • 保存ppt
  # 保存ppt
  ppt.save('4.1.2 设置文字框与字体样式.pptx')

4.2 python-pptx 添加表格并设置样式

示例代码:

from pptx import Presentation
from pptx.util import Pt,Cm
from pptx.dml.color import RGBColor
from pptx.enum.text import MSO_ANCHOR
from pptx.enum.text import PP_ALIGN


# 设置需要添加到哪一页
n_page = 0

# 打开已存在ppt
ppt = Presentation('4. python-pptx操作模板.pptx')

# 获取slide对象
slide = ppt.slides[n_page]

# 设置表格位置和大小
left, top, width, height = Cm(6), Cm(12), Cm(13.6), Cm(5)
# 表格行列数,和大小
shape = slide.shapes.add_table(6, 7, left, top, width, height)
# 获取table对象
table = shape.table

# 设置列宽
table.columns[0].width = Cm(3)
table.columns[1].width = Cm(2.3)
table.columns[2].width = Cm(2.3)
table.columns[3].width = Cm(1.3)
table.columns[4].width = Cm(1.3)
table.columns[5].width = Cm(1.3)
table.columns[6].width = Cm(2.1)

# 设置行高
table.rows[0].height = Cm(1)

# 合并首行
table.cell(0, 0).merge(table.cell(0, 6))

# 填写标题
table.cell(1, 0).text = 时间
table.cell(1, 1).text = 阶段
table.cell(1, 2).text = 执行用例
table.cell(1, 3).text = 新增问题
table.cell(1, 4).text = 问题总数
table.cell(1, 5).text = 遗留问题
table.cell(1, 6).text = 遗留致命/ \
                        严重问题

# 填写变量内容
table.cell(0, 0).text = 产品1
content_arr = [[4/30-5/14, DVT1, 20, 12, 22, 25, 5],
               [5/15-5/21, DVT1, 25, 32, 42, 30, 8],
               [5/22-6/28, DVT1, 1, 27, 37, 56, 12],
               [5/22-6/28, DVT1, 1, 27, 37, 56, 12]]

# 修改表格样式
for rows in range(6):
    for cols in range(7):
        # Write column titles
        if rows == 0:
            # 设置文字大小
            table.cell(rows, cols).text_frame.paragraphs[0].font.size = Pt(15)
            # 设置字体
            table.cell(rows, cols).text_frame.paragraphs[0].font.name = '微软雅黑'
            # 设置文字颜色
            table.cell(rows, cols).text_frame.paragraphs[0].font.color.rgb = RGBColor(255, 255, 255)
            # 设置文字左右对齐
            table.cell(rows, cols).text_frame.paragraphs[0].alignment = PP_ALIGN.CENTER
            # 设置文字上下对齐
            table.cell(rows, cols).vertical_anchor = MSO_ANCHOR.MIDDLE
            # 设置背景为填充
            table.cell(rows, cols).fill.solid()
            # 设置背景颜色
            table.cell(rows, cols).fill.fore_color.rgb = RGBColor(34, 134, 165)
        elif rows == 1:
            table.cell(rows, cols).text_frame.paragraphs[0].font.size = Pt(10)
            table.cell(rows, cols).text_frame.paragraphs[0].font.name = '微软雅黑'  # 字体名称
            table.cell(rows, cols).text_frame.paragraphs[0].font.color.rgb = RGBColor(0, 0, 0)
            table.cell(rows, cols).text_frame.paragraphs[0].alignment = PP_ALIGN.CENTER
            table.cell(rows, cols).vertical_anchor = MSO_ANCHOR.MIDDLE
            table.cell(rows, cols).fill.solid()
            table.cell(rows, cols).fill.fore_color.rgb = RGBColor(204, 217, 225)
        else:
            table.cell(rows, cols).text = content_arr[rows - 2][cols]
            table.cell(rows, cols).text_frame.paragraphs[0].font.size = Pt(10)
            table.cell(rows, cols).text_frame.paragraphs[0].font.name = '微软雅黑'  # 字体名称
            table.cell(rows, cols).text_frame.paragraphs[0].font.color.rgb = RGBColor(0, 0, 0)
            table.cell(rows, cols).text_frame.paragraphs[0].alignment = PP_ALIGN.CENTER
            table.cell(rows, cols).vertical_anchor = MSO_ANCHOR.MIDDLE
            table.cell(rows, cols).fill.solid()
            table.cell(rows, cols).fill.fore_color.rgb = RGBColor(204, 217, 225)

ppt.save('4.2 python-pptx 添加表格并设置样式.pptx')

效果如下:

图片

4.3 python-pptx 添加图表并设置样式

示例代码:

from pptx import Presentation
from pptx.util import Pt,Cm
from pptx.chart.data import ChartData
from pptx.enum.chart import XL_CHART_TYPE


# 设置需要添加到哪一页
n_page = 0

# 打开已存在ppt
ppt = Presentation('4. python-pptx操作模板.pptx')

# 获取slide对象
slide = ppt.slides[n_page]

# 初始化图表
chart_data = ChartData()

# 填充需要添加的内容
content_arr = [[4/30-5/14, DVT1, 20, 12, 22, 25, 5],
               [5/15-5/21, DVT1, 25, 32, 42, 30, 8],
               [5/22-6/28, DVT1, 1, 27, 37, 56, 12],
               [5/22-6/28, DVT1, 1, 27, 37, 56, 12]]

# 填充图表
chart_data.categories = [content_arr[0][0], content_arr[1][0], content_arr[2][0], content_arr[3][0]]
chart_data.add_series(问题总数, (content_arr[0][4], content_arr[1][4], content_arr[2][4], content_arr[3][4]))
chart_data.add_series(遗留问题总数, (content_arr[0][5], content_arr[1][5], content_arr[2][5], content_arr[3][5]))
chart_data.add_series(遗留致命严重\n问题总数, (content_arr[0][6], content_arr[1][6], content_arr[2][6], content_arr[3][6]))

# 设置位置
left, top, width, height = Cm(6), Cm(10), Cm(16.1), Cm(7.5)
# 添加图表
chart = slide.shapes.add_chart(
    XL_CHART_TYPE.LINE, left, top, width, height, chart_data
).chart


chart.has_legend = True
chart.legend.include_in_layout = False
# chart.series[0].smooth = True # 是否平滑
# chart.series[1].smooth = True
# chart.series[2].smooth = True
chart.font.size = Pt(10)  # 文字大小

ppt.save('4.3 python-pptx 添加图表并设置样式.pptx')
print('折线图添加完成')

效果如下:

图片

其它图表可参考: https://www.cnblogs.com/adam012019/p/11348938.html

4.4 python-pptx 添加形状并设置样式

这里的形状可以是这些:

图片

形状别名可以再这里查看:

https://docs.microsoft.com/zh-cn/office/vba/api/Office.MsoAutoShapeType

图片

并对应这里,找到正确的枚举名:

https://python-pptx.readthedocs.io/en/latest/api/enum/MsoAutoShapeType.html#msoautoshapetype

图片

程序示例:

from pptx import Presentation
from pptx.util import Pt,Cm
from pptx.dml.color import RGBColor
from pptx.enum.text import PP_ALIGN
from pptx.enum.shapes import MSO_SHAPE


# 设置需要添加到哪一页
n_page = 0

# 打开已存在ppt
ppt = Presentation('4. python-pptx操作模板.pptx')

# 获取slide对象
slide = ppt.slides[n_page]

# 添加矩形
# 设置位置以及大小
left, top, width, height = Cm(2.5), Cm(4.5), Cm(30), Cm(0.5)
# 添加形状
rectangle = slide.shapes.add_shape(MSO_SHAPE.RECTANGLE, left, top, width, height)
# 设置背景填充
rectangle.fill.solid()
# 设置背景颜色
rectangle.fill.fore_color.rgb = RGBColor(34, 134, 165)
# 设置边框颜色
rectangle.line.color.rgb = RGBColor(34, 134, 165)

# 添加正三角+文字(正常)
left, top, width, height = Cm(3), Cm(5.1), Cm(0.5), Cm(0.4)
slide.shapes.add_shape(MSO_SHAPE.FLOWCHART_EXTRACT, left, top, width, height)
new_paragraph = slide.shapes.add_textbox(left=left - Cm(0.95), top=top + Cm(0.4), width=Cm(2.4),height=Cm(1.1)).text_frame
content = 2020/01/05
内容1
new_paragraph.paragraphs[0].text = content
new_paragraph.paragraphs[0].font.size = Pt(10)  # 文字大小
new_paragraph.paragraphs[0].alignment = PP_ALIGN.CENTER

# 添加正三角+文字(延期)
left, top, width, height = Cm(9), Cm(5.1), Cm(0.5), Cm(0.4)
extract = slide.shapes.add_shape(MSO_SHAPE.FLOWCHART_EXTRACT, left, top, width, height)
extract.fill.solid()
extract.fill.fore_color.rgb = RGBColor(255, 0, 0)
extract.line.color.rgb = RGBColor(255, 0, 0)

new_paragraph = slide.shapes.add_textbox(left=left - Cm(0.95), top=top + Cm(0.4), width=Cm(2.4),height=Cm(1.1)).text_frame
content = 2020/01/05
内容2
new_paragraph.paragraphs[0].text = content  # 文字内容
new_paragraph.paragraphs[0].font.size = Pt(10)  # 文字大小
new_paragraph.paragraphs[0].font.color.rgb = RGBColor(255, 0, 0)    # 文字颜色
new_paragraph.paragraphs[0].alignment = PP_ALIGN.CENTER # 文字水平对齐方式

# 添加倒三角+间隔条+文字
left, top, width, height = Cm(5), Cm(4), Cm(0.5), Cm(0.4)
slide.shapes.add_shape(MSO_SHAPE.FLOWCHART_MERGE, left, top, width, height)
gap = slide.shapes.add_shape(MSO_SHAPE.RECTANGLE, left + Cm(0.2), top + Cm(0.5), Cm(0.05), Cm(0.5))
gap.fill.solid()
gap.fill.fore_color.rgb = RGBColor(255, 255, 255)
gap.line.color.rgb = RGBColor(255, 255, 255)

new_paragraph = slide.shapes.add_textbox(left=left - Cm(0.95), top=top - Cm(1), width=Cm(2.4),height=Cm(1.1)).text_frame
content = 2020/01/05
内容3
new_paragraph.paragraphs[0].text = content
new_paragraph.paragraphs[0].font.size = Pt(10)  # 文字大小
new_paragraph.paragraphs[0].alignment = PP_ALIGN.CENTER

# 添加当前时间图形
left, top, width, height = Cm(7), Cm(4), Cm(0.5), Cm(0.4)
now = slide.shapes.add_shape(MSO_SHAPE.DOWN_ARROW, left, top, width, height)
now.fill.solid()
now.fill.fore_color.rgb = RGBColor(254, 152, 47)
now.line.color.rgb = RGBColor(254, 152, 47)

ppt.save('4.4 python-pptx 添加形状并设置样式.pptx')
print('进度条添加完成')

效果如下:

图片

5.seaborn绘图库介绍与使用

官方网址:http://seaborn.pydata.org/

图片

  • seaborn是基于Matplotlib的Python数据可视化库。它提供了一个高级界面,用于绘制引人入胜且内容丰富的统计图形

  • 只是在Matplotlib上进行了更高级的API封装,从而使作图更加容易

  • seaborn是针对统计绘图的,能满足数据分析90%的绘图需求,需要复杂的自定义图形还需要使用到Matplotlib

5.1 pip安装seaborn

pip install seaborn

效果如下(我的显示已安装):

图片

使用:

import seaborn as sns 
# 或者
import seaborn

使用数据集:

import seaborn as sns

tips = sns.load_dataset(tips)

无法连接:

图片

图片

下载数据集:

https://github.com/mwaskom/seaborn-data

放到本地:

图片

运行程序:

import seaborn as sns

tips = sns.load_dataset(tips)

print(tips:,tips)
print(ype(tips):,type(tips))

效果如下:

图片

5.2 seaborn绘制折线图

5.2.1 通过relplot来实现

示例代码:

import matplotlib.pyplot as plt
import seaborn as sns

# 数据集
data = sns.load_dataset(fmri)
print(data.head())
# 绘画折线图
sns.relplot(x=timepoint, y=signal, kind=line, data=data, ci=None)
# 显示
plt.show()

效果如下:

图片

5.2.2 通过lineplot()函数来实现

示例代码:

import matplotlib.pyplot as plt
import seaborn as sns

# 数据集
data = sns.load_dataset(fmri)
print(data.head())
# 绘画折线图:
sns.lineplot(x=timepoint, y=signal, data=data, ci=95)
# 显示
plt.show()

效果如下:

图片

5.2.3 多坐标效果

示例代码:

import matplotlib.pyplot as plt
import seaborn as sns

# 数据集
data = sns.load_dataset(fmri)
print(data.head())

# 绘画折线图
f, axes = plt.subplots(nrows=1, ncols=2, figsize=(14, 6))

sns.lineplot(x=timepoint, y=signal, data=data, ci=None, ax=axes[0])
sns.lineplot(x=timepoint, y=signal, hue=region, style=event, data=data, ci=None, ax=axes[1])
plt.show()

效果如下:

图片

5.2.4 保存生成的图片

注意:需要在plt.show()之前调用savefig,不然保存的图片就是一片空白

plt.savefig('seaborn生成的图片.png')

plt.show()

效果如下:

图片

图片

5.3 seaborn replot 绘制散点图

图片

示例代码:

import matplotlib.pyplot as plt
import seaborn as sns

# 准备数据:自带数据集
tips = sns.load_dataset(tips)
print(tips.head())

# 绘画散点图
sns.relplot(x=total_bill, y=tip, data=tips, hue=sex, style=smoker, size=size)
sns.relplot(x=total_bill, y=tip, data=tips, hue=sex, style=smoker, size=size, sizes=(100, 100))
# 显示
plt.show()

效果如下:

图片

5.4 seaborn barplot绘制柱状图

  • 垂直

示例代码:

import matplotlib.pyplot as plt
import seaborn as sns

# 显示正负号与中文不显示问题
plt.rcParams['axes.unicode_minus'] = False
sns.set_style('darkgrid', {'font.sans-serif':['SimHei', 'Arial']})

# 去除部分warning
import warnings
warnings.filterwarnings('ignore')

plt.figure(dpi=150)
x = ['金融','农业','制造业','新能源']
y = [164, 86, 126, 53]
sns.barplot(x, y)

plt.show()

效果如下:

图片

  • 水平

调换横纵坐标位置即可

plt.figure(dpi=150)
x = ['金融','农业','制造业','新能源']
y = [164, 86, 126, 53]
sns.barplot(y,x )
plt.show()

图片

6.python-pptx 插入图片

前提条件:

图片

示例代码:

from pptx import Presentation
from pptx.util import Pt,Cm

# 打开已存在ppt
ppt = Presentation('6.python-pptx操作模板.pptx')

# 设置添加到当前ppt哪一页
n_page = 0

# 获取需要添加文字的页面对象
slide = ppt.slides[n_page]

# 设置待添加的图片
img_name  = 'seaborn生成的图片.png'
# 设置位置
left, top, width, height = Cm(6), Cm(6), Cm(20), Cm(9)
# 进行添加
slide.shapes.add_picture(image_file=img_name,left=left,top=top,width=width,height=height)

# 保存ppt
ppt.save('6.python-pptx 插入图片.pptx')

效果如下:

图片

图片

7.python-pptx 读取数据

前提条件:

准备好一张有内容的ppt

图片

示例代码:

from pptx import Presentation
from pptx.enum.shapes import MSO_SHAPE_TYPE

# 打开待读取的ppt文件
ppt = Presentation('研发管理部检测部周报2020-09-17.pptx')

# 获取第0张
slide0 = ppt.slides[0]

# 遍历所有内容
for shape in slide0.shapes:
    # 打印shape名称
    print(shape.shape_type)
    # 判断是否为表格
    if shape.shape_type == MSO_SHAPE_TYPE.TABLE:
        #获取表格行
        for row in shape.table.rows:
            for cell in row.cells:
                print(cell.text_frame.text)

效果如下:

将当前幻灯片页面中的对象名称和表格内容全部打印出来了,反之,我们对其进行复制,就是写操作。

图片

图片

推荐文章

技术交流

欢迎转载、收藏、有所收获点赞支持一下!

在这里插入图片描述

目前开通了技术交流群,群友已超过2000人,添加时最好的备注方式为:来源+兴趣方向,方便找到志同道合的朋友

  • 方式①、发送如下图片至微信,长按识别,后台回复:加群;
  • 方式②、添加微信号:dkl88191,备注:来自CSDN
  • 方式③、微信搜索公众号:Python学习与数据挖掘,后台回复:加群

长按关注

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

2W+字系统讲解如何用Python自动化操作PPT,学懂这篇文章就够了 的相关文章

  • Python:在列表理解本身中引用列表理解?

    这个想法刚刚出现在我的脑海中 假设您出于某种原因想要通过 Python 中的列表理解来获取列表的唯一元素 i if i in created comprehension else 0 for i in 1 2 1 2 3 1 2 0 0 3
  • Django 代理模型的继承和多态性

    我正在开发一个我没有启动的 Django 项目 我面临着一个问题遗产 我有一个大模型 在示例中简化 称为MyModel这应该代表不同种类的物品 的所有实例对象MyModel应该具有相同的字段 但方法的行为根据项目类型的不同而有很大差异 到目
  • Python 中的 Lanczos 插值与 2D 图像

    我尝试重新缩放 2D 图像 灰度 图像大小为 256x256 所需输出为 224x224 像素值范围从 0 到 1300 我尝试了两种使用 Lanczos 插值来重新调整它们的方法 首先使用PIL图像 import numpy as np
  • Django 管理员在模型编辑时间歇性返回 404

    我们使用 Django Admin 来维护导出到我们的一些站点的一些数据 有时 当单击标准更改列表视图来获取模型编辑表单而不是路由到正确的页面时 我们会得到 Django 404 页面 模板 它是偶尔发生的 我们可以通过重新加载三次来重现它
  • 将 saxon 与 python 结合使用

    我需要使用 python 处理 XSLT 目前我正在使用仅支持 XSLT 1 的 lxml 现在我需要处理 XSLT 2 有没有办法将 saxon XSLT 处理器与 python 一起使用 有两种可能的方法 设置一个 HTTP 服务 接受
  • 使 django 服务器可以在 LAN 中访问

    我已经安装了Django服务器 可以如下访问 http localhost 8000 get sms http 127 0 0 1 8000 get sms 假设我的IP是x x x x 当我这样做时 从同一网络下的另一台电脑 my ip
  • Flask 会话变量

    我正在用 Flask 编写一个小型网络应用程序 当两个用户 在同一网络下 尝试使用应用程序时 我遇到会话变量问题 这是代码 import os from flask import Flask request render template
  • 如何从网页中嵌入的 Tableau 图表中抓取工具提示值

    我试图弄清楚是否有一种方法以及如何使用 python 从网页中的 Tableau 嵌入图形中抓取工具提示值 以下是当用户将鼠标悬停在条形上时带有工具提示的图表示例 我从要从中抓取的原始网页中获取了此网址 https covid19 colo
  • SQLALchemy .query:类“Car”的未解析属性引用“query”

    我有一个这里已经提到的问题https youtrack jetbrains com issue PY 44557 https youtrack jetbrains com issue PY 44557 但我还没有找到解决方案 我使用 Pyt
  • 基于代理的模拟:性能问题:Python vs NetLogo & Repast

    我正在 Python 3 中复制一小段 Sugarscape 代理模拟模型 我发现我的代码的性能比 NetLogo 慢约 3 倍 这可能是我的代码的问题 还是Python的固有限制 显然 这只是代码的一个片段 但 Python 却花费了三分
  • Spark KMeans 无法处理大数据吗?

    KMeans 有几个参数training http spark apache org docs latest api python pyspark mllib html highlight kmeans pyspark mllib clus
  • Python 函数可以从作用域之外赋予新属性吗?

    我不知道你可以这样做 def tom print tom s locals locals def dick z print z name z name z guest Harry print z guest z guest print di
  • 如何使用 OpencV 从 Firebase 读取图像?

    有没有使用 OpenCV 从 Firebase 读取图像的想法 或者我必须先下载图片 然后从本地文件夹执行 cv imread 功能 有什么办法我可以使用cv imread link of picture from firebase 您可以
  • 绘制方程

    我正在尝试创建一个函数 它将绘制我告诉它的任何公式 import numpy as np import matplotlib pyplot as plt def graph formula x range x np array x rang
  • BeautifulSoup 中的嵌套标签 - Python

    我在网站和 stackoverflow 上查看了许多示例 但找不到解决我的问题的通用解决方案 我正在处理一个非常混乱的网站 我想抓取一些数据 标记看起来像这样 table tbody tr tr tr td td td table tr t
  • 在Python中获取文件描述符的位置

    比如说 我有一个原始数字文件描述符 我需要根据它获取文件中的当前位置 import os psutil some code that works with file lp lib open path to file p psutil Pro
  • 如何使用Python创建历史时间线

    So I ve seen a few answers on here that helped a bit but my dataset is larger than the ones that have been answered prev
  • 使用 \r 并打印一些文本后如何清除控制台中的一行?

    对于我当前的项目 有一些代码很慢并且我无法使其更快 为了获得一些关于已完成 必须完成多少的反馈 我创建了一个进度片段 您可以在下面看到 当你看到最后一行时 sys stdout write r100 80 n I use 80覆盖最终剩余的
  • Pandas:merge_asof() 对多行求和/不重复

    我正在处理两个数据集 每个数据集具有不同的关联日期 我想合并它们 但因为日期不完全匹配 我相信merge asof 是最好的方法 然而 有两件事发生merge asof 不理想的 数字重复 数字丢失 以下代码是一个示例 df a pd Da
  • 导入错误:没有名为 site 的模块 - mac

    我已经有这个问题几个月了 每次我想获取一个新的 python 包并使用它时 我都会在终端中收到此错误 ImportError No module named site 我不知道为什么会出现这个错误 实际上 我无法使用任何新软件包 因为每次我

随机推荐

  • JEECG online表单代码生成菜单授权后,提示“没有权限,请联系管理员授权”

    JEECG online表单代码生成菜单授权后 提示 没有权限 请联系管理员授权 参考官方文档 http doc jeecg com 2044037 一 不添加按钮 权限 找到生成代码路径中的controller中的java文件进行队jav
  • pandas数据分组与聚合

    目录 1 数据分组 1 1 按列名分组 1 2按列表或元组分组 1 3 按字典分组 1 4按函数分组
  • Linux多线程编程知识汇总!

    大家好 我杂烩君 什么是多线程编程 1 线程和进程的区别 进程是指正在运行的程序 它拥有独立的内存空间和系统资源 不同进程之间的数据不共享 线程是进程内的执行单元 它与同一进程内的其他线程共享进程的内存空间和系统资源 2 多线程的优势和应用
  • 计算机网络-应用层协议5(P2P)

    本文介绍两种特别适合P2P设计的应用 第一种是文件分发 从单个源向大量对等方分发一个文件 特殊例子BitTorrent 第二种P2P应用是分布在大型对等社区中的数据库 重点讨论分布式散列表 DHT 的概念 1 P2P文件分发 首先介绍文件分
  • Windows中卷(Volume)操作,获取卷GUID、磁盘类型、磁盘大小等API

    Windows中卷 Volume 操作 1 阅读msdn整理卷相关的知识点 https docs microsoft com zh cn windows win32 fileio volume management 2 重点讲解几个常用的A
  • Linux操作系统进程的状态和转换(五态模型)

    1 进程的状态和装换 1 1进程的三态模型 按进程在执行过程中的不同情况至少要定义三种状态 运行 running 态 进程占有处理器正在运行的状态 进程已获得CPU 其程序正在执行 在单处理机系统中 只有一个进程处于执行状态 在多处理机系统
  • 【PHP】Cannot declare class app\admin\controller\Goods because the name is already in use

    author 咔咔 wechat fangkangfk 发生这个报错我也很多意外 但是还是需要解决 看了一下控制器 反正我的理解是类名不能喝模型名一样 其他的我也不知道怎么解释 就这样哈 问题解决就好
  • CSS background-position属性

    background position可以用于设置背景图像的位置 主要有以下三类 1 关键字 center top left bottom right 如果只写了一个值 那么第二个值默认为center 比如 background posit
  • 第二章 摩格里奇时代

    第二章 摩格里奇时代 现在思科的CEO钱伯斯头上光环耀眼 但不要忘了 钱伯斯之所以能够达到今天的高度 是因为他站在 巨人 肩膀上的缘故 这个巨人就是摩格里奇 很多人都知道思科 都知道钱伯斯 但是对思科的第一任CEO摩格里奇却不太熟悉 事实上
  • 【论文翻译】PyMAF-X: Towards Well-aligned Full-bodyModel Regression from Monocular Images

    摘要 我们提出了PyMAF X 一种基于回归的方法 从单个图像中恢复全身参数模型 这个任务是非常具有挑战性的 因为微小的参数偏差可能会导致估计网格和输入图像之间明显的不对齐 此外 当将特定部位的估计集成到全身模型时 现有的解决方案往往会降低
  • SpringMVC源码研究之注解mvc:argument-resolvers

    1 起因 最近在看开涛大神的 跟我学Shiro 系列文章的源码时 发现这样的一个技巧 通过一个继承自Shiro自定义PathMatchingFilter的SysUserFilter类将当前用户的信息推入到本次请求Request实例中 然后使
  • 运用Prometheus监控Flink

    1 为什么选择Prometheus 2 使用自动发现的配置方式有什么优点 3 如何提交作业 为什么选择Prometheus 随着深入地了解Prometheus 你会发现一些非常好的功能 服务发现使配置更加容易 Prometheus支持con
  • 《图解HTTP》笔记2

    1 SSL Secure Socket Layer 安全套接层 1 SSL的作用 通信加密 确定通信方 SSL 提供认证和加密处理及摘要功能 HTTP 协议中没有加密机制 但可以通过和 SSL Secure Socket Layer 安全套
  • Python写小游戏之石头剪刀布,while循环if判断语句

    剪刀石头布实验 game input 剪刀石头布小游戏 本游戏为五局三胜制 请输入go开始挑战 num 0 false 0 true 0 planish 0 while game go and num lt 5 num 1 a input
  • dgl库的后端设置

    dgl库当中后端设置方法 关于dgl大致介绍 关于后端 关于dgl大致介绍 目前最为火爆的深度学习应该就是关于图神经网络相关的研究了 传统的机器学习算法已经非常成熟 但是解决的问题对象是有限的 容易受到数据的结构等影响 比如非结构化的数据就
  • Series.to_frame()函数

    可以将数组转换为DataFrame格式 示例
  • 【极化 SAR 图像分类】H-Alpha 分类

    希望这篇内容可以帮到来自未来的你 样图 实现 部分缺省实现可参考 极化 SAR 图像分类 H Alpha 平面绘制 jaredyam的博客 CSDN博客 import matplotlib pyplot as plt import nump
  • Qt通过QProcess启动进程并传递命令行参数

    目录 QProcess 启动外部程序的两种方式 依赖式 分离式 启动进程前的预处理 设置启动路径 设置启动命令参数 启动的状态 更多说明 Public Functions Signals 设计一个拉起进程的程序 基本设计思路 效果图 核心代
  • 前端错误监控及前端错误上报

    window addEventListener unhandledrejection e gt console log error e throw e reason window addEventListener error errs gt
  • 2W+字系统讲解如何用Python自动化操作PPT,学懂这篇文章就够了

    大家好 之前给大家分享过用Python办公自动化系列 Python 自动化操作Excel PDF 今天给大家分享用Python自动化操作PPT 本文内容较长 喜欢记得关注 收藏 点赞 注 文末提供资料和交流方式 1 PPT自动化能干什么 有