最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python腳本自動(dòng)生成PowerPoint演示文件圖表

 更新時(shí)間:2026年03月17日 14:53:53   作者:站大爺IP  
借助python-pptx這個(gè)庫(kù),你可以在代碼里定義圖表、填充數(shù)據(jù)、調(diào)整格式,讓計(jì)算機(jī)替你完成那些機(jī)械重復(fù)的操作,下面這份教程,我會(huì)帶著你從零開始,一步步寫出能自動(dòng)生成PPT圖表的Python腳本

周五下午三點(diǎn),部門群里彈出一條消息:"各位,下周一匯報(bào)的各季度運(yùn)營(yíng)數(shù)據(jù)PPT,今晚12點(diǎn)前發(fā)我合并。"小王盯著屏幕愣了五秒,扭頭看了一眼角落里堆積如山的Excel表格——十二個(gè)季度的銷售數(shù)據(jù)、八個(gè)區(qū)域的業(yè)績(jī)對(duì)比、二十多條產(chǎn)品線的趨勢(shì)分析。

打開PowerPoint,新建幻燈片,插入圖表,編輯數(shù)據(jù),調(diào)整格式。重復(fù),重復(fù),再重復(fù)。三個(gè)小時(shí)后,他才做完三分之一。窗外天黑了下來,屏幕上還躺著十幾個(gè)待生成的圖表。

這種場(chǎng)景,做數(shù)據(jù)分析、運(yùn)營(yíng)、財(cái)務(wù)、咨詢的朋友應(yīng)該都不陌生。每周、每月、每季度,同樣的數(shù)據(jù)源,同樣的圖表類型,同樣的格式調(diào)整,一遍又一遍地手動(dòng)操作。不是工作有多難,而是重復(fù)勞動(dòng)實(shí)在太耗人。

Python能解決這個(gè)問題。借助python-pptx這個(gè)庫(kù),你可以在代碼里定義圖表、填充數(shù)據(jù)、調(diào)整格式,讓計(jì)算機(jī)替你完成那些機(jī)械重復(fù)的操作。下面這份教程,我會(huì)帶著你從零開始,一步步寫出能自動(dòng)生成PPT圖表的Python腳本。

先裝好工具包

開始之前,需要安裝python-pptx庫(kù)。打開命令行,輸入這行命令:

pip install python-pptx

安裝完成后,在Python腳本里導(dǎo)入它:

from pptx import Presentation
from pptx.chart.data import CategoryChartData
from pptx.enum.chart import XL_CHART_TYPE
from pptx.util import Inches
from pptx.dml.color import RGBColor

這些模塊各有用處:Presentation負(fù)責(zé)創(chuàng)建和讀取PPT文件,CategoryChartData用來組織圖表數(shù)據(jù),XL_CHART_TYPE定義了圖表類型,Inches用于設(shè)置尺寸,RGBColor則是調(diào)色用的。

新建幻燈片并添加柱狀圖

先從最基礎(chǔ)的操作開始——創(chuàng)建一個(gè)新的PPT文件,添加一張幻燈片,然后在上面畫一個(gè)柱狀圖。

# 創(chuàng)建一個(gè)新的演示文稿
prs = Presentation()
# 添加一張空白幻燈片(版式6通常是空白)
slide = prs.slides.add_slide(prs.slide_layouts[6])

# 準(zhǔn)備圖表數(shù)據(jù)
chart_data = CategoryChartData()
# 設(shè)置橫軸(X軸)的類別
chart_data.categories = ['華東', '華南', '華北', '西南', '東北']
# 添加一個(gè)數(shù)據(jù)系列
chart_data.add_series('2025年銷售額', (42.5, 38.2, 35.7, 28.3, 22.8))

# 設(shè)置圖表位置和大小
x, y, cx, cy = Inches(1), Inches(1.5), Inches(8), Inches(5)

# 添加圖表到幻燈片
chart_frame = slide.shapes.add_chart(
    XL_CHART_TYPE.COLUMN_CLUSTERED, x, y, cx, cy, chart_data
)

# 保存文件
prs.save('sales_chart.pptx')

運(yùn)行這段代碼,打開生成的PPT文件,你會(huì)看到一張包含五個(gè)地區(qū)柱狀圖的幻燈片。數(shù)據(jù)已經(jīng)填好,圖表自動(dòng)生成。

折線圖展示趨勢(shì)變化

如果是展示時(shí)間序列數(shù)據(jù),折線圖更合適。換一種圖表類型就行:

# 準(zhǔn)備折線圖數(shù)據(jù)
chart_data = CategoryChartData()
# X軸是時(shí)間
chart_data.categories = ['Q1', 'Q2', 'Q3', 'Q4']
# 添加三個(gè)系列的數(shù)據(jù)
chart_data.add_series('產(chǎn)品A', (12.3, 15.6, 18.2, 21.7))
chart_data.add_series('產(chǎn)品B', (8.5, 11.2, 14.8, 16.3))
chart_data.add_series('產(chǎn)品C', (5.2, 7.8, 9.5, 12.1))

# 添加折線圖
chart_frame = slide.shapes.add_chart(
    XL_CHART_TYPE.LINE, x, y, cx, cy, chart_data
)

chart = chart_frame.chart
# 給第一條線加上平滑效果
chart.series[0].smooth = True

折線圖的代碼結(jié)構(gòu)和柱狀圖幾乎一樣,只是XL_CHART_TYPE換成了LINE。如果想生成帶標(biāo)記點(diǎn)的折線圖,可以用LINE_WITH_MARKERS。

餅圖看占比

遇到占比分析的場(chǎng)景,餅圖是標(biāo)配。餅圖的特殊之處在于只能有一個(gè)數(shù)據(jù)系列,而且沒有坐標(biāo)軸概念:

# 準(zhǔn)備餅圖數(shù)據(jù)
chart_data = CategoryChartData()
chart_data.categories = ['直接銷售', '渠道代理', '電商平臺(tái)', '戰(zhàn)略合作']
chart_data.add_series('2025年收入構(gòu)成', (45.2, 28.7, 18.3, 7.8))

# 添加餅圖
chart_frame = slide.shapes.add_chart(
    XL_CHART_TYPE.PIE, x, y, cx, cy, chart_data
)

chart = chart_frame.chart

# 顯示圖例
chart.has_legend = True
chart.legend.position = XL_LEGEND_POSITION.BOTTOM

# 顯示數(shù)據(jù)標(biāo)簽,并設(shè)置為百分比格式
chart.plots[0].has_data_labels = True
data_labels = chart.plots[0].data_labels
data_labels.number_format = '0%'
data_labels.position = XL_LABEL_POSITION.OUTSIDE_END

設(shè)置數(shù)據(jù)標(biāo)簽格式時(shí)用到了number_format屬性,'0%'表示顯示為整數(shù)百分比。如果想保留一位小數(shù),可以用'0.0%'。

散點(diǎn)圖與氣泡圖

散點(diǎn)圖和氣泡圖適合處理科學(xué)數(shù)據(jù)或連續(xù)變量的關(guān)系分析。它們的特殊之處在于數(shù)據(jù)點(diǎn)可以有自己的X值,不需要所有系列共享同一套X軸標(biāo)簽。

散點(diǎn)圖代碼示例:

from pptx.chart.data import XyChartData

# 準(zhǔn)備散點(diǎn)圖數(shù)據(jù)
chart_data = XyChartData()

series_1 = chart_data.add_series('模型A')
series_1.add_data_point(1.2, 3.4)
series_1.add_data_point(2.5, 4.1)
series_1.add_data_point(3.8, 2.7)
series_1.add_data_point(4.2, 5.3)

series_2 = chart_data.add_series('模型B')
series_2.add_data_point(1.5, 2.8)
series_2.add_data_point(2.8, 3.9)
series_2.add_data_point(3.2, 4.5)
series_2.add_data_point(4.5, 3.2)

# 添加散點(diǎn)圖
chart_frame = slide.shapes.add_chart(
    XL_CHART_TYPE.XY_SCATTER, x, y, cx, cy, chart_data
)

氣泡圖在此基礎(chǔ)上多了一個(gè)尺寸參數(shù),每個(gè)數(shù)據(jù)點(diǎn)需要提供X值、Y值和氣泡大小三個(gè)數(shù)值。

調(diào)整坐標(biāo)軸讓圖表更專業(yè)

圖表生成后,還可以對(duì)坐標(biāo)軸做精細(xì)化調(diào)整。比如修改刻度范圍、添加網(wǎng)格線、調(diào)整字體等:

from pptx.enum.chart import XL_TICK_MARK
from pptx.util import Pt

chart = chart_frame.chart

# 調(diào)整數(shù)值軸(Y軸)
value_axis = chart.value_axis
value_axis.maximum_scale = 50.0  # 設(shè)置Y軸最大值
value_axis.minimum_scale = 0.0   # 設(shè)置Y軸最小值
value_axis.has_major_gridlines = True  # 顯示主要網(wǎng)格線

# 設(shè)置Y軸標(biāo)簽格式為帶百分號(hào)
value_axis.tick_labels.number_format = '0"萬元"'
value_axis.tick_labels.font.size = Pt(12)
value_axis.tick_labels.font.bold = True

# 調(diào)整分類軸(X軸)
category_axis = chart.category_axis
category_axis.tick_labels.font.italic = True
category_axis.tick_labels.font.size = Pt(11)

通過tick_labels可以控制坐標(biāo)軸上數(shù)字的字體、大小、粗體等屬性,number_format則決定了數(shù)字顯示的方式,比如加上單位或者轉(zhuǎn)為百分比。

數(shù)據(jù)標(biāo)簽和圖例

想讓圖表更清晰,數(shù)據(jù)標(biāo)簽和圖例必不可少:

from pptx.enum.chart import XL_LABEL_POSITION, XL_LEGEND_POSITION

# 添加數(shù)據(jù)標(biāo)簽
plot = chart.plots[0]
plot.has_data_labels = True
data_labels = plot.data_labels
data_labels.font.size = Pt(10)
data_labels.position = XL_LABEL_POSITION.ABOVE  # 標(biāo)簽顯示在柱子上方
data_labels.font.color.rgb = RGBColor(0x40, 0x40, 0x40)  # 深灰色

# 調(diào)整圖例
chart.has_legend = True
chart.legend.position = XL_LEGEND_POSITION.TOP  # 圖例顯示在頂部
chart.legend.font.size = Pt(11)

數(shù)據(jù)標(biāo)簽的位置有多種選擇,柱狀圖常用ABOVE或INSIDE_END,餅圖適合OUTSIDE_END。

給圖表?yè)Q個(gè)顏色

默認(rèn)的配色可能不符合公司品牌或者你的審美。可以通過設(shè)置主題色來調(diào)整,或者直接指定顏色:

# 修改第一個(gè)系列的填充顏色
series = chart.series[0]
point = series.points[0]  # 第一個(gè)數(shù)據(jù)點(diǎn)
point.format.fill.solid()
point.format.fill.fore_color.rgb = RGBColor(0x42, 0x85, 0xF4)  # 藍(lán)色

# 修改繪圖區(qū)背景色
chart.plot_area.format.fill.solid()
chart.plot_area.format.fill.fore_color.rgb = RGBColor(0xF5, 0xF5, 0xF5)  # 淺灰背景

python-pptx支持對(duì)單個(gè)數(shù)據(jù)點(diǎn)、整個(gè)系列、繪圖區(qū)、圖表區(qū)分別設(shè)置顏色,靈活性很高。

從Excel讀取數(shù)據(jù)自動(dòng)生成

上面的例子都是手動(dòng)輸入數(shù)據(jù)。在實(shí)際工作中,數(shù)據(jù)通常存放在Excel表格里。結(jié)合pandas和openpyxl,可以實(shí)現(xiàn)完全自動(dòng)化的數(shù)據(jù)讀取和圖表生成:

import pandas as pd
from pptx import Presentation
from pptx.chart.data import CategoryChartData
from pptx.enum.chart import XL_CHART_TYPE
from pptx.util import Inches

# 從Excel讀取數(shù)據(jù)
df = pd.read_excel('sales_data.xlsx', sheet_name='季度銷售')

# 準(zhǔn)備數(shù)據(jù)
categories = df['地區(qū)'].tolist()
series_data = {
    'Q1': df['Q1'].tolist(),
    'Q2': df['Q2'].tolist(),
    'Q3': df['Q3'].tolist(),
    'Q4': df['Q4'].tolist()
}

# 創(chuàng)建PPT
prs = Presentation()
slide = prs.slides.add_slide(prs.slide_layouts[6])

# 填充圖表數(shù)據(jù)
chart_data = CategoryChartData()
chart_data.categories = categories
for quarter, values in series_data.items():
    chart_data.add_series(quarter, values)

# 添加圖表
x, y, cx, cy = Inches(1), Inches(1.5), Inches(10), Inches(6)
slide.shapes.add_chart(
    XL_CHART_TYPE.COLUMN_CLUSTERED, x, y, cx, cy, chart_data
)

prs.save('auto_generated_report.pptx')

這段代碼讀取Excel文件,取出地區(qū)和各季度銷售額,自動(dòng)生成一張包含四個(gè)系列的簇狀柱狀圖。如果Excel里有多張表、多個(gè)年份的數(shù)據(jù),用循環(huán)可以批量生成幾十張甚至上百?gòu)垐D表。

處理多圖表幻燈片

有時(shí)候一張幻燈片上需要放多個(gè)圖表。python-pptx支持在同一張幻燈片上添加多個(gè)圖表,只要計(jì)算好各自的位置就行:

# 左側(cè)圖表
x1, y1, cx1, cy1 = Inches(0.5), Inches(1.5), Inches(5), Inches(4)
chart1 = slide.shapes.add_chart(
    XL_CHART_TYPE.COLUMN_CLUSTERED, x1, y1, cx1, cy1, chart_data1
).chart

# 右側(cè)圖表
x2, y2, cx2, cy2 = Inches(6), Inches(1.5), Inches(5), Inches(4)
chart2 = slide.shapes.add_chart(
    XL_CHART_TYPE.PIE, x2, y2, cx2, cy2, chart_data2
).chart

獲取圖表對(duì)象時(shí)注意,add_chart返回的是包含圖表的圖形框(GraphicFrame),需要用.chart屬性才能拿到真正的圖表對(duì)象進(jìn)行后續(xù)設(shè)置。

常見問題與解決

圖表生成后打不開?檢查下python-pptx版本,建議用最新版。圖表數(shù)據(jù)不顯示?確認(rèn)數(shù)據(jù)格式是否正確,add_series接受列表或元組。中文顯示亂碼?PPT模板的字體問題,可以在母版里設(shè)置支持中文的字體。

顏色和預(yù)期不一樣?默認(rèn)顏色來自PPT模板的主題色,如果對(duì)顏色有嚴(yán)格要求,建議先準(zhǔn)備好一個(gè)帶自定義主題色的模板文件,然后用python-pptx打開這個(gè)模板添加內(nèi)容。

生成幾百頁(yè)的大型PPT時(shí)內(nèi)存占用過高?可以考慮分批次生成,或者每生成一頁(yè)就保存一次,避免把所有內(nèi)容都放在內(nèi)存里。

總結(jié)

Python自動(dòng)生成PPT圖表,不是要取代你做數(shù)據(jù)分析,而是幫你從機(jī)械重復(fù)的操作中解脫出來。把精力放在理解數(shù)據(jù)、發(fā)現(xiàn)規(guī)律、提煉觀點(diǎn)上,讓代碼去處理那些復(fù)制粘貼、拖拽調(diào)整、重復(fù)格式化的瑣事。

掌握這門技術(shù)后,再遇到"今晚12點(diǎn)前交PPT"的場(chǎng)景,你可以淡定地回復(fù):"好的,五分鐘后發(fā)你。"然后把Excel拖進(jìn)腳本,喝杯咖啡,看著電腦自動(dòng)生成幾十頁(yè)圖文并茂的報(bào)告。

說到底,工具的價(jià)值不在于它有多復(fù)雜,而在于它替你省下多少時(shí)間,讓你能做那些真正需要人來做的事情。

?以上就是Python腳本自動(dòng)生成PowerPoint演示文件圖表的詳細(xì)內(nèi)容,更多關(guān)于Python生成PowerPoint圖表的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python中 Lambda表達(dá)式全面解析

    Python中 Lambda表達(dá)式全面解析

    Lambda是一種匿名函數(shù),當(dāng)我們需要重復(fù)調(diào)用某一函數(shù),又不想寫那么多代碼時(shí)可以使用lambda表達(dá)式來代替。本文給大家介紹Python中 Lambda表達(dá)式,需要的朋友一起學(xué)習(xí)吧
    2016-11-11
  • Python簡(jiǎn)繁體轉(zhuǎn)換的簡(jiǎn)單實(shí)現(xiàn)步驟

    Python簡(jiǎn)繁體轉(zhuǎn)換的簡(jiǎn)單實(shí)現(xiàn)步驟

    工作中需要將繁體中文轉(zhuǎn)換成簡(jiǎn)體中文上網(wǎng)找了些資料,下面這篇文章主要給大家介紹了關(guān)于Python實(shí)現(xiàn)簡(jiǎn)繁體轉(zhuǎn)換的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06
  • TensorFlow實(shí)現(xiàn)批量歸一化操作的示例

    TensorFlow實(shí)現(xiàn)批量歸一化操作的示例

    這篇文章主要介紹了TensorFlow實(shí)現(xiàn)批量歸一化操作的示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • Python處理JSON的完全指南:從基礎(chǔ)到實(shí)戰(zhàn),掌握數(shù)據(jù)交換核心技能

    Python處理JSON的完全指南:從基礎(chǔ)到實(shí)戰(zhàn),掌握數(shù)據(jù)交換核心技能

    本文將從?JSON?與?Python?的類型映射講起,帶你理解序列化與反序列化的底層邏輯,然后通過實(shí)戰(zhàn)案例演示如何解析?API?數(shù)據(jù)、處理自定義對(duì)象,最后總結(jié)出?3?個(gè)避坑技巧
    2026-06-06
  • Python中read()、readline()和readlines()方法比較及使用詳解

    Python中read()、readline()和readlines()方法比較及使用詳解

    在Python文件操作中,read()、readline()和readlines()是三個(gè)常用的文件讀取方法,它們各有特點(diǎn),適用于不同的場(chǎng)景,本文將深入探討這三個(gè)方法的區(qū)別、使用場(chǎng)景、性能比較以及最佳實(shí)踐,需要的朋友可以參考下
    2025-03-03
  • Python?Flask實(shí)現(xiàn)后臺(tái)任務(wù)輕松構(gòu)建高效API應(yīng)用

    Python?Flask實(shí)現(xiàn)后臺(tái)任務(wù)輕松構(gòu)建高效API應(yīng)用

    本文介紹如何使用Python?Flask框架實(shí)現(xiàn)后臺(tái)任務(wù),以快速構(gòu)建高效的API應(yīng)用。通過實(shí)例演示,讀者將學(xué)會(huì)如何利用Flask框架搭建后臺(tái)任務(wù),實(shí)現(xiàn)異步處理和多線程操作等高級(jí)功能,提升應(yīng)用性能和用戶體驗(yàn)
    2023-04-04
  • Python不同格式打印九九乘法表示例

    Python不同格式打印九九乘法表示例

    大家好,本篇文章主要講的是Python不同格式打印九九乘法表示例,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下哦,方便下次瀏覽
    2021-12-12
  • python selenium自動(dòng)上傳有贊單號(hào)的操作方法

    python selenium自動(dòng)上傳有贊單號(hào)的操作方法

    這篇文章主要介紹了python selenium自動(dòng)上傳有贊單號(hào)的操作代碼,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-07-07
  • 從原理詳解Python進(jìn)行Base64解碼的實(shí)戰(zhàn)技巧

    從原理詳解Python進(jìn)行Base64解碼的實(shí)戰(zhàn)技巧

    Base64編碼解碼是處理二進(jìn)制數(shù)據(jù)的常見需求,無論是處理API響應(yīng),還是數(shù)據(jù)存儲(chǔ),今天我們從實(shí)際應(yīng)用角度出發(fā),深入探討B(tài)ase64解碼的技術(shù)細(xì)節(jié),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-08-08
  • python3獲取控制臺(tái)輸入的數(shù)據(jù)的具體實(shí)例

    python3獲取控制臺(tái)輸入的數(shù)據(jù)的具體實(shí)例

    在本篇內(nèi)容里小編給大家分享的是一篇關(guān)于python3獲取控制臺(tái)輸入的數(shù)據(jù)的具體實(shí)例內(nèi)容,需要的朋友們可以學(xué)習(xí)下。
    2020-08-08

最新評(píng)論

静宁县| 大田县| 山西省| 黄陵县| 巨野县| 乌拉特后旗| 潞城市| 迭部县| 荔波县| 柳江县| 宁蒗| 安化县| 满洲里市| 车险| 广南县| 开封市| 冷水江市| 斗六市| 望奎县| 许昌县| 柘城县| 大余县| 竹山县| 海淀区| 晴隆县| 灵台县| 金乡县| 望城县| 海林市| 喀喇沁旗| 安溪县| 门源| 武夷山市| 海口市| 紫金县| 喜德县| 祁连县| 郓城县| 集贤县| 东乡| 鄱阳县|