Настройка легенд диаграмм в презентациях с использованием Java

Обзор

Aspose.Slides for Java предоставляет возможности настройки легенд диаграмм в презентациях PowerPoint. Эта статья показывает, как установить позицию и размер легенды, задать размер шрифта для всей легенды, отформатировать отдельный элемент легенды и скрыть или восстановить выбранные элементы.

В разделе FAQ рассматриваются связанные особенности, включая резервирование места для легенды, отображение многострочных меток и наследование форматирования из темы презентации.

Позиционирование легенды

Используйте методы легенды setX, setY, setWidth и setHeight для указания её позиции и размеров в виде долей от размеров диаграммы.

В этом примере создаётся презентация и добавляется сгруппированная столбчатая диаграмма с данными по умолчанию на первый слайд. Деление желаемых смещений и размеров легенды на ширину и высоту диаграммы преобразует их в относительные значения: легенда смещена на 50 пунктов от левого верхнего угла диаграммы и имеет размер 100 × 100 пунктов.

import com.aspose.slides.*;

Presentation presentation = new Presentation();
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    IChart 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 com.aspose.slides.*;

Presentation presentation = new Presentation();
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    IChart 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 com.aspose.slides.*;
import java.awt.Color;

Presentation presentation = new Presentation();
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    IChart chart = slide.getShapes().addChart(ChartType.ClusteredColumn, 50, 50, 600, 400);
    IChartTextFormat textFormat = chart.getLegend().getEntries().get_Item(1).getTextFormat();

    textFormat.getPortionFormat().setFontBold(NullableBool.True);
    textFormat.getPortionFormat().setFontHeight(20);
    textFormat.getPortionFormat().setFontItalic(NullableBool.True);
    textFormat.getPortionFormat().getFillFormat().setFillType(FillType.Solid);
    textFormat.getPortionFormat().getFillFormat().getSolidFillColor().setColor(Color.BLUE);

    presentation.save("legend_entry_format.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Скрыть отдельные элементы легенды

Чтобы исключить вспомогательную серию из легенды, оставив её данные видимыми, вызовите ILegendEntryProperties.setHide с true через IChartSeries.getRelatedLegendEntry. Это скрывает только выбранный элемент легенды; серия и её точки данных остаются. Вызов IChart.setLegend с false, наоборот, скрывает всю легенду.

В примере ниже создаётся сгруппированная столбчатая диаграмма с несколькими сериями, использующая данные по умолчанию. Она скрывает элемент легенды второй серии (индекс 1) и сохраняет презентацию. Затем элемент восстанавливается вызовом setHide с false и сохраняется вторая копия. Столбцы остаются видимыми в обоих файлах.

import com.aspose.slides.*;

Presentation presentation = new Presentation();
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    IChart chart = slide.getShapes().addChart(ChartType.ClusteredColumn, 50, 50, 600, 400);
    chart.setLegend(true);

    ILegendEntryProperties legendEntry = chart.getChartData().getSeries().get_Item(1).getRelatedLegendEntry();

    legendEntry.setHide(true);
    presentation.save("hidden_legend_entry.pptx", SaveFormat.Pptx);

    // Восстановить тот же элемент без изменения данных диаграммы.
    legendEntry.setHide(false);
    presentation.save("restored_legend_entry.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Сравнение ниже показывает одну и ту же диаграмму с видимыми всеми элементами легенды и со скрытым вторым элементом. Столбцы второй серии остаются без изменений.

Сравнение диаграммы со всеми видимыми элементами легенды и с скрытым элементом Series 2 в легенде; все столбцы остаются видимыми.

В столбчатых, линейных и гистограммных диаграммах элементы легенды идентифицируют серии. В круговых диаграммах они идентифицируют отдельные точки данных (дольки), поэтому используйте IChartDataPoint.getRelatedLegendEntry для выбранной дольки. API документирует этот метод для типов диаграмм Pie, Pie3D, ExplodedPie, ExplodedPie3D, PieOfPie и BarOfPie. Не следует предполагать, что он применим к кольцевым диаграммам, которые в этом списке не указаны.

Часто задаваемые вопросы

Можно ли заставить диаграмму резервировать место для легенды вместо её наложения?

Да. Вызовите setOverlay с false, чтобы зарезервировать место для легенды вместо её наложения на область построения.

Можно ли сделать многострочные подписи в легенде?

Да. Длинные подписи могут переноситься, если доступной ширины недостаточно. Вы также можете использовать символы переноса строки в названиях серий для принудительного разрыва строк.

Как сделать так, чтобы легенда следовала цветовой схеме темы презентации?

Не задавайте цвета, заливки и шрифты легенды, чтобы она могла наследовать форматирование темы. Явное форматирование переопределяет соответствующие параметры темы.