Изменить начальный угол / угол первого среза PIE-диаграммы в python-pptx - PullRequest
1 голос
/ 28 мая 2019

У меня есть круговая диаграмма с несколькими сегментами.Я хочу, чтобы определенный сегмент пирога начинался с угла, который я предоставляю.pie chart image

Ответы [ 2 ]

1 голос
/ 29 мая 2019

Функции "вращения" круговой диаграммы в PowerPoint ограничены позиционированием угла "начала" первого сегмента, причем сегменты растут только по часовой стрелке.

Таким образом, вы можете указать, что первый элемент отображается в70 градусов (по часовой стрелке от позиции 12 часов).

В настоящее время API-поддержка для этого не поддерживается, но значение находится в XML в месте, указанном @Saleh выше: /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 вызовы, чтобы добавить его сначала.

0 голосов
/ 03 июня 2019

Ниже приведены шаги для изменения firstSliceAng круговой диаграммы в python-pptx:

  1. Проверьте, существуют ли теги firstSliceAng или нет:
firstSliceAng = pieChart.xpath("./c:firstSliceAng")
print(firstSliceAng)

Expected output: 
[<some-object>]

Если список пуст, это означает, что вам нужно добавить firstSliceAng, используя lxml или oxml

Чтобы добавить его с помощью 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)```
...