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

在python pptx中更改饼图的开始角度/第一个切片角度,python,python-pptx,Python,Python Pptx,我有一个饼图,里面有多个部分。我希望某些饼图片段从我提供的角度开始 PowerPoint中的饼图“旋转”功能仅限于定位第一个线段的“开始”角度,线段仅沿顺时针方向增长 因此,您可以指定第一个元素以70度的角度显示(从12点钟位置顺时针) 目前没有对此的API支持,但该值在上面@Saleh提到的位置的XML中:/c:chartSpace/c:chart/c:plotArea/c:pieChart/c:firstSliceAng 您可以在以下位置访问c:doughnutChart元素: chart.

我有一个饼图,里面有多个部分。我希望某些饼图片段从我提供的角度开始

PowerPoint中的饼图“旋转”功能仅限于定位第一个线段的“开始”角度,线段仅沿顺时针方向增长

因此,您可以指定第一个元素以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中更改piechart的firstSliceAng的步骤:

  • 检查FIRSTLICEANG标记是否存在:
  • 要使用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)
    
        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)```
    

    请附上一张照片。饼图中如何包含多个饼?你想从哪一部分开始?它默认做什么?嘿@scanny!对于我们的项目,我编辑了
    /c:chartSpace/c:chart/c:plotArea/c:doughnutChart/c:firstSliceAng
    。默认值为0,我将其更改为270,效果很好。但请注意,我正在使用的饼图中只有1个系列。试试你的图表,让我们知道它是否有效。实际上我指的是多段。编辑上述问题并添加图像。我要华氏70度
        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)```