Настройка легенд диаграмм в презентациях с использованием Python
Обзор
Aspose.Slides for Python via Java предоставляет возможности настройки легенд диаграмм в презентациях PowerPoint. В этой статье показано, как задать позицию и размер легенды, установить размер шрифта для всей легенды, отформатировать отдельный элемент легенды и скрыть или восстановить выбранные элементы.
Раздел FAQ охватывает связанные поведения, включая резервирование места для легенды, отображение многострочных меток и наследование форматирования из темы презентации.
Позиционирование легенды
Используйте методы легенды setX, setY, setWidth и setHeight для указания её позиции и размеров в долях от размеров диаграммы.
В этом примере создаётся презентация и добавляется сгруппированная столбчатая диаграмма с данными по умолчанию на первый слайд. Деление желаемых смещений и размеров легенды на ширину и высоту диаграммы преобразует их в относительные значения: легенда смещена на 50 пунктов от левого верхнего угла диаграммы и имеет размер 100 × 100 пунктов.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import ChartType, Presentation, SaveFormat
presentation = Presentation()
try:
slide = presentation.getSlides().get_Item(0)
chart = slide.getShapes().addChart(ChartType.ClusteredColumn, 50, 50, 500, 500)
# Выражение позиции и размера легенды относительно диаграммы.
chart.getLegend().setX(50 / chart.getWidth())
chart.getLegend().setY(50 / chart.getHeight())
chart.getLegend().setWidth(100 / chart.getWidth())
chart.getLegend().setHeight(100 / chart.getHeight())
presentation.save("legend_position.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Установить размер шрифта легенды
Используйте метод легенды getTextFormat для доступа к её форматированию текста и setFontHeight для установки размера шрифта в пунктах.
В этом примере создаётся диаграмма с данными по умолчанию и задаётся размер шрифта текста легенды 20 пунктов. Также отключаются автоматические границы для вертикальной оси и задаётся диапазон от ‑5 до 10.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import ChartType, Presentation, SaveFormat
presentation = Presentation()
try:
slide = presentation.getSlides().get_Item(0)
chart = slide.getShapes().addChart(ChartType.ClusteredColumn, 50, 50, 600, 400)
chart.getLegend().getTextFormat().getPortionFormat().setFontHeight(20)
chart.getAxes().getVerticalAxis().setAutomaticMinValue(False)
chart.getAxes().getVerticalAxis().setMinValue(-5)
chart.getAxes().getVerticalAxis().setAutomaticMaxValue(False)
chart.getAxes().getVerticalAxis().setMaxValue(10)
presentation.save("legend_font_size.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Установить размер шрифта отдельного элемента легенды
Используйте коллекцию, возвращаемую методом легенды getEntries, чтобы получить доступ к форматированию конкретного элемента. Индексы элементов начинаются с нуля, поэтому индекс 1 относится ко второму элементу.
В этом примере создаётся сгруппированная столбчатая диаграмма, данные которой по умолчанию включают как минимум две серии. Второй элемент легенды форматируется полужирным, курсивом и с синим текстом размером 20 пунктов.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import ChartType, FillType, NullableBool, Presentation, SaveFormat
Color = jpype.JClass("java.awt.Color")
presentation = Presentation()
try:
slide = presentation.getSlides().get_Item(0)
chart = slide.getShapes().addChart(ChartType.ClusteredColumn, 50, 50, 600, 400)
text_format = chart.getLegend().getEntries().get_Item(1).getTextFormat()
text_format.getPortionFormat().setFontBold(NullableBool.True_)
text_format.getPortionFormat().setFontHeight(20)
text_format.getPortionFormat().setFontItalic(NullableBool.True_)
text_format.getPortionFormat().getFillFormat().setFillType(FillType.Solid)
text_format.getPortionFormat().getFillFormat().getSolidFillColor().setColor(Color.BLUE)
presentation.save("legend_entry_format.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Скрыть отдельные элементы легенды
Чтобы исключить вспомогательную серию из легенды, оставив её данные видимыми, вызовите LegendEntryProperties.setHide со значением True через ChartSeries.getRelatedLegendEntry. Это скрывает только выбранный элемент легенды; серия и её точки данных остаются. Вызов Chart.setLegend со значением False, наоборот, скрывает всю легенду.
Ниже приведён пример, который создаёт сгруппированную столбчатую диаграмму с несколькими сериями, используя данные по умолчанию. Он скрывает элемент легенды второй серии (индекс 1) и сохраняет презентацию. Затем восстанавливает элемент, вызвав setHide со значением False, и сохраняет вторую копию. Столбцы остаются видимыми в обоих файлах.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import ChartType, Presentation, SaveFormat
presentation = Presentation()
try:
slide = presentation.getSlides().get_Item(0)
chart = slide.getShapes().addChart(ChartType.ClusteredColumn, 50, 50, 600, 400)
chart.setLegend(True)
legend_entry = chart.getChartData().getSeries().get_Item(1).getRelatedLegendEntry()
legend_entry.setHide(True)
presentation.save("hidden_legend_entry.pptx", SaveFormat.Pptx)
# Восстановить тот же элемент без изменения данных диаграммы.
legend_entry.setHide(False)
presentation.save("restored_legend_entry.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Сравнение ниже показывает одну и ту же диаграмму со всеми видимыми элементами легенды и со скрытым вторым элементом. Столбцы второй серии остаются без изменений.

В столбчатых, линейных и гистограммных диаграммах элементы легенды обозначают серии. В круговых диаграммах они обозначают отдельные точки данных (срезы), поэтому используйте ChartDataPoint.getRelatedLegendEntry для выбранного среза. API документирует этот метод для типов диаграмм Pie, Pie3D, ExplodedPie, ExplodedPie3D, PieOfPie и BarOfPie. Не следует считать, что он применим к кольцевым диаграммам, которые в этот список не включены.
FAQ
Могу ли я заставить диаграмму резервировать место для легенды вместо наложения её?
Да. Вызовите setOverlay со значением False, чтобы зарезервировать пространство для легенды, а не позволять ей перекрывать область построения.
Можно ли сделать многострочные подписи в легенде?
Да. Длинные подписи могут переноситься, если доступной ширины недостаточно. Вы также можете использовать символы переноса строки в названиях серий, чтобы задать разрывы строк.
Как сделать так, чтобы легенда следовала цветовой схеме темы презентации?
Оставьте цвета, заливки и шрифты легенды неопределёнными, чтобы она могла наследовать форматирование из темы. Явное форматирование переопределяет соответствующие настройки темы.