Оптимизация вычислений диаграмм для презентаций в Python через Java

Обзор

Aspose.Slides предоставляет API для работы с вычислениями диаграмм и данными макета в презентациях. В этой статье показано, как получить фактические значения элементов диаграммы, включая реальное положение и размер элементов диаграммы и фактические значения осей диаграммы. Также объясняется, что эти значения заполняются после проверки макета диаграммы.

Кроме того, в статье демонстрируется, как получить фактическое положение родительских элементов диаграммы и как скрыть компоненты диаграммы, такие как заголовок, оси, легенда и линии сетки. Вместе эти примеры помогут вам программно проверять информацию о макете диаграммы и управлять видимостью элементов диаграммы в презентациях PowerPoint.

Вычисление фактических значений элементов диаграммы

Aspose.Slides for Python via Java предоставляет простой API для получения этих свойств. Методы класса Axis предоставляют информацию о фактических значениях осей диаграммы (getActualMaxValue, getActualMinValue, getActualMajorUnit, getActualMinorUnit, getActualMajorUnitScale, getActualMinorUnitScale). Сначала вызовите метод Chart.validateChartLayout, чтобы заполнить эти свойства фактическими значениями.

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import ChartType, Presentation

presentation = Presentation()
try:
    chart = presentation.getSlides().get_Item(0).getShapes().addChart(ChartType.Area, 100, 100, 500, 350)
    chart.validateChartLayout()

    max_value = chart.getAxes().getVerticalAxis().getActualMaxValue()
    min_value = chart.getAxes().getVerticalAxis().getActualMinValue()

    major_unit = chart.getAxes().getHorizontalAxis().getActualMajorUnit()
    minor_unit = chart.getAxes().getHorizontalAxis().getActualMinorUnit()
finally:
    presentation.dispose()

Вычисление фактического положения родительских элементов диаграммы

Aspose.Slides for Python via Java предоставляет простой API для получения этих свойств. Методы класса ChartPlotArea предоставляют информацию о фактическом положении и размере области построения диаграммы (getActualX, getActualY, getActualWidth, getActualHeight). Сначала вызовите метод Chart.validateChartLayout, чтобы заполнить эти свойства фактическими значениями.

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import ChartType, Presentation

presentation = Presentation()
try:
    chart = presentation.getSlides().get_Item(0).getShapes().addChart(ChartType.ClusteredColumn, 100, 100, 500, 350)
    chart.validateChartLayout()

    x = chart.getPlotArea().getActualX()
    y = chart.getPlotArea().getActualY()
    width = chart.getPlotArea().getActualWidth()
    height = chart.getPlotArea().getActualHeight()
finally:
    presentation.dispose()

Скрытие элементов диаграммы

В этом разделе объясняется, как скрыть информацию в диаграмме. С помощью Aspose.Slides for Python via Java вы можете скрыть Заголовок, Вертикальную ось, Горизонтальную ось и Линии сетки. Следующий пример кода показывает, как использовать эти свойства.

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpway.startJVM()

from asposeslides.api import ChartType, FillType, LegendDataLabelPosition, LineDashStyle, MarkerStyleType, Presentation, SaveFormat
from java.awt import Color

presentation = Presentation()
try:
    slide = presentation.getSlides().get_Item(0)
    chart = slide.getShapes().addChart(ChartType.LineWithMarkers, 140, 118, 320, 370)

    # Скрыть заголовок диаграммы.
    chart.setTitle(False)

    # Скрыть ось значений.
    chart.getAxes().getVerticalAxis().setVisible(False)

    # Скрыть ось категорий.
    chart.getAxes().getHorizontalAxis().setVisible(False)

    # Скрыть легенду.
    chart.setLegend(False)

    # Скрыть основные линии сетки.
    chart.getAxes().getHorizontalAxis().getMajorGridLinesFormat().getLine().getFillFormat().setFillType(FillType.NoFill)

    # Оставить только первую серию. Удаление с конца сохраняет корректность оставшихся индексов.
    series_collection = chart.getChartData().getSeries()
    while series_collection.size() > 1:
        series_collection.removeAt(series_collection.size() - 1)

    series = series_collection.get_Item(0)

    series.getMarker().setSymbol(MarkerStyleType.Circle)
    series.getLabels().getDefaultDataLabelFormat().setShowValue(True)
    series.getLabels().getDefaultDataLabelFormat().setPosition(LegendDataLabelPosition.Top)
    series.getMarker().setSize(15)

    # Установить цвет линии серии.
    series.getFormat().getLine().getFillFormat().setFillType(FillType.Solid)
    series.getFormat().getLine().getFillFormat().getSolidFillColor().setColor(Color.MAGENTA)
    series.getFormat().getLine().setDashStyle(LineDashStyle.Solid)

    presentation.save("HideInformationFromChart.pptx", SaveFormat.Pptx)
finally:
    presentation.dispose()

FAQ

Работают ли внешние книги Excel как источник данных и как это влияет на перерасчёт?

Да. Диаграмма может ссылаться на внешнюю книгу: при подключении или обновлении внешнего источника формулы и значения берутся из этой книги, и диаграмма отражает изменения во время операций открытия/редактирования. API позволяет указать путь к external workbook и управлять связанными данными.

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

Да. Trendlines (линейные, экспоненциальные и другие) добавляются и обновляются Aspose.Slides; их параметры автоматически пересчитываются из данных серии, поэтому вам не нужно реализовывать собственные расчёты.

Если в презентации несколько диаграмм со внешними ссылками, могу ли я контролировать, какую книгу использует каждая диаграмма для вычисленных значений?

Да. Каждая диаграмма может указывать свою external workbook, либо вы можете создать/заменить внешнюю книгу для каждой диаграммы независимо от остальных.