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

时间:2019-05-28 12:36:53

标签: python python-pptx

我有一个饼图,其中包含多个细分。我希望某些饼图从我提供的角度开始。 pie chart image

3 个答案:

答案 0 :(得分:1)

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调用来首先添加它。

答案 1 :(得分:0)

如果chart.plots[0]._element.xml中不存在c:firstSliceAng,则可以按以下代码添加firstSliceAngle:

    tag = tags[0]
    child = OxmlElement('c:firstSliceAng')
    child.set('val', "70")
    tag.addnext(child)

但是一旦我添加了“ c:firstSliceAng”,pptx将无法在MS Office中打开。

答案 2 :(得分:0)

下面是在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)```