Изменить начальный угол/угол первого среза круговой диаграммы в python-pptx

У меня есть круговая диаграмма с несколькими сегментами. Я хочу, чтобы определенный сегмент круговой диаграммы начинался с заданного мною угла. Изменить начальный угол/угол первого среза круговой диаграммы в python-pptx

Пожалуйста, включите изображение. Как на круговой диаграмме может быть несколько кругов? Какой сегмент вы хотите начать? Что он делает по умолчанию?

scanny 28.05.2019 19:24

Привет, @scanny! Для нашего проекта я отредактировал /c:chartSpace/c:chart/c:plotArea/c:doughnutChart/c:firstSlic‌​eAng. Значение по умолчанию было 0, и я изменил его на 270, и все работает нормально. Но обратите внимание, что на круговой диаграмме, с которой я работаю, была только 1 серия. Попробуйте со своей диаграммой и дайте нам знать, если она работает.

Saleh 28.05.2019 23:00

На самом деле я имел в виду несколько сегментов. Редактирование вышеуказанной проблемы и добавление изображения. Я хочу pediasure на 70 градусов

Shrenik Doshi 29.05.2019 08:24
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
3
405
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Функции «поворота» круговой диаграммы в 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:

  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)```

Другие вопросы по теме