如何使用python-pptx库创建半圆环形图?
使用python-pptx创建半圆环形图的方案
python-pptx本身**没有内置的半圆环形图(半甜甜圈图)**类型,但可以通过两种方式实现:
方法1:修改环形图的XML属性
python-pptx生成的环形图基于Open XML格式,我们可以直接修改其底层XML,将环形图的显示角度限制为180度,从而变成半圆环形。
示例代码:
from pptx import Presentation from pptx.enum.chart import XL_CHART_TYPE from pptx.util import Inches # 创建PPT并添加幻灯片 prs = Presentation() slide = prs.slides.add_slide(prs.slide_layouts[5]) # 添加普通环形图 x, y, cx, cy = Inches(1), Inches(1), Inches(8), Inches(4) chart = slide.shapes.add_chart( XL_CHART_TYPE.DOUGHNUT, x, y, cx, cy ).chart # 设置图表数据 chart_data = chart.chart_data chart_data.categories = ['A', 'B', 'C', 'D'] chart_data.add_series('Series 1', [15, 30, 25, 30]) # 修改XML将环形图转为半圆 # 获取图表的pie元素(环形图属于pie chart的变种) pie = chart._chartSpace.chart.plotArea.plots[0]._element # 设置角度范围:起始0度,结束180度(显示上半圆) pie.catAx.scaling.max.val = 180 pie.catAx.scaling.min.val = 0 # 调整环形的厚度(可选) pie.donutHoleSize.val = 60 # 百分比,值越大环形越细 prs.save('semi_donut.pptx')
方法2:用Matplotlib生成图片后插入
如果修改XML的方式过于复杂,可以先用Matplotlib画出半圆环形图,保存为图片再插入到PPT中。
示例代码:
from pptx import Presentation from pptx.util import Inches import matplotlib.pyplot as plt # 用Matplotlib生成半圆环形图 labels = ['A', 'B', 'C', 'D'] sizes = [15, 30, 25, 30] fig, ax = plt.subplots() # 设置为半圆:startangle=90,counterclock=False,wedgeprops设置宽度 wedges, texts = ax.pie( sizes, labels=labels, startangle=90, counterclock=False, wedgeprops={'width': 0.4}, # 环形厚度 pctdistance=0.8 # 百分比标签位置 ) # 设置坐标轴为圆形,确保是正半圆 ax.set_aspect('equal') # 隐藏下半部分(通过设置y轴范围) ax.set_ylim(0, 1) plt.savefig('semi_donut.png', bbox_inches='tight', transparent=True) plt.close() # 插入图片到PPT prs = Presentation() slide = prs.slides.add_slide(prs.slide_layouts[5]) pic = slide.shapes.add_picture( 'semi_donut.png', Inches(1), Inches(1), width=Inches(8) ) prs.save('semi_donut_from_image.pptx')
注意:第一种方法的XML修改需要依赖python-pptx的内部结构,不同版本可能有细微差异;第二种方法更直观,但需要额外安装Matplotlib。
内容的提问来源于stack exchange,提问作者hjun
相关产品推荐
相关产品推荐

