У меня есть круговая диаграмма с несколькими сегментами. Я хочу, чтобы определенный сегмент круговой диаграммы начинался с заданного мною угла.
Привет, @scanny! Для нашего проекта я отредактировал /c:chartSpace/c:chart/c:plotArea/c:doughnutChart/c:firstSliceAng
. Значение по умолчанию было 0, и я изменил его на 270, и все работает нормально. Но обратите внимание, что на круговой диаграмме, с которой я работаю, была только 1 серия. Попробуйте со своей диаграммой и дайте нам знать, если она работает.
На самом деле я имел в виду несколько сегментов. Редактирование вышеуказанной проблемы и добавление изображения. Я хочу pediasure на 70 градусов
Функции «поворота» круговой диаграммы в 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
, чтобы добавить его первым.
Ниже приведены шаги по изменению firstSliceAng круговой диаграммы в python-pptx:
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)```
Пожалуйста, включите изображение. Как на круговой диаграмме может быть несколько кругов? Какой сегмент вы хотите начать? Что он делает по умолчанию?