在python-pptx中更改饼图的起始角度/第一个切片角度

Change start angle/ first slice angle of PIE chart in python-pptx

我有一个包含多个部分的饼图。我希望某些饼图部分从我提供的角度开始。

PowerPoint 中的饼图"rotation" 功能仅限于定位第一段的 "start" 角度,段仅按顺时针方向增长。

因此您可以指定第一个元素出现在 70 度(从 12 点钟位置顺时针方向)。

目前没有 API 支持,但值在上面@Saleh 提到的位置 XML 中:/c:chartSpace/c:chart/c:plotArea/c:pieChart/c:firstSliceAng

您可以访问 c:doughnutChart 元素:

chart.plots[0]._element

并打印:

print(chart.plots[0]._element.xml)

如果它恰好已经有一个 c:firstSliceAng 元素,您可以更改设置,也许是这样的:

pieChart = chart.plots[0]._element
firstSliceAng = pieChart.xpath("./c:firstSliceAng")
firstSliceAng["val"] = "70"

如果那里没有 firstSliceAng 元素,您需要先使用 lxml 调用来添加它。

以下是python-pptx中改变饼图firstSliceAng的步骤:

  1. 检查firstSliceAng标签是否存在:
firstSliceAng = pieChart.xpath("./c:firstSliceAng")
print(firstSliceAng)

Expected output: 
[<some-object>]

如果列表为空,则表示您需要使用 lxml 或 oxml 添加 firstSliceAng

要使用 lxml 添加它,请使用以下步骤:

    tag = tags[0]
    child = OxmlElement('c:firstSliceAng')
    # keep in mind that **start_angle** should always be string whose value is int and not float
    **start_angle = str(int(75.55))**
    child.set('val', start_angle+45)
    tag.addprevious(child)

要使用 lxml 添加它,请使用以下步骤:

    doc = etree.parse(StringIO(xml))
    root = doc.getroot()
    # keep in mind that **start_angle** should always be string whose value is int and not float
    **start_angle = str(int(75.55))**
    c = Element(QName(root.nsmap['c'], 'firstSliceAng'), val=start_angle)
    present_element = chart.plots[0]._element.xpath('c:varyColors')[0]
    present_element.addprevious(c)```