Форматирование диаграмм в презентациях с использованием Python

Обзор

Это руководство демонстрирует, как форматировать диаграммы PowerPoint с помощью Aspose.Slides для Python. Оно пошагово описывает настройку основных элементов диаграммы — осей категорий и значений, линий сетки, меток, заголовков, легенд и вторичных осей, а также показывает, как управлять шрифтами, числовыми форматами, заливками, контурами, цветами области построения и задней стены, а также скруглёнными углами диаграммы с помощью компактных, готовых к запуску примеров кода. Следуя пошаговым примерам, вы создадите Presentation, добавите и настроите диаграмму и сохраните результат в PPTX, применив точные визуальные и типографические настройки.

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

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

Aspose.Slides предоставляет простой API для управления элементами диаграммы и применения пользовательского форматирования:

  1. Создайте экземпляр класса Presentation.
  2. Получите ссылку на слайд по его индексу.
  3. Добавьте диаграмму с данными по умолчанию требуемого типа (в этом примере ChartType.LINE_WITH_MARKERS).
  4. Доступ к оси значений диаграммы и настройте следующее:
    1. Установите формат линии для основных линий сетки оси значений.
    2. Установите формат линии для вспомогательных линий сетки оси значений.
    3. Установите числовой формат для оси значений.
    4. Установите минимум, максимум, основные и вспомогательные единицы для оси значений.
    5. Установите свойства текста для меток оси значений.
    6. Установите заголовок для оси значений.
    7. Установите формат линии для оси значений.
  5. Доступ к оси категорий диаграммы и настройте следующее:
    1. Установите формат линии для основных линий сетки оси категорий.
    2. Установите формат линии для вспомогательных линий сетки оси категорий.
    3. Установите свойства текста для меток оси категорий.
    4. Установите заголовок для оси категорий.
    5. Установите позиционирование меток для оси категорий.
    6. Установите угол вращения для меток оси категорий.
  6. Доступ к легенде диаграммы и настройте её свойства текста.
  7. Покажите легенду диаграммы без наложения на саму диаграмму.
  8. Доступ к вторичной оси значений диаграммы и настройте следующее:
    1. Включите вторичную ось значений.
    2. Установите формат линии для вторичной оси значений.
    3. Установите числовой формат для вторичной оси значений.
    4. Установите минимум, максимум, основные и вспомогательные единицы для вторичной оси значений.
  9. Отобразите первую серию диаграммы на вторичной оси значений.
  10. Установите цвет заливки задней стены диаграммы.
  11. Установите цвет заливки области построения диаграммы.
  12. Запишите изменённую презентацию в файл PPTX.
import aspose.slides.charts as charts
import aspose.slides as slides
import aspose.pydrawing as draw

# Создать экземпляр класса Presentation.
with slides.Presentation() as presentation:

    # Получить доступ к первому слайду.
    slide = presentation.slides[0]

    # Добавить пример диаграммы.
    chart = slide.shapes.add_chart(charts.ChartType.LINE_WITH_MARKERS, 50, 50, 500, 400)

    # Установить заголовок диаграммы.
    chart.has_title = True
    chart.chart_title.add_text_frame_for_overriding("")
    chart_title = chart.chart_title.text_frame_for_overriding.paragraphs[0].portions[0]
    chart_title.text = "Sample Chart"
    chart_title.portion_format.fill_format.fill_type = slides.FillType.SOLID
    chart_title.portion_format.fill_format.solid_fill_color.color = draw.Color.gray
    chart_title.portion_format.font_height = 20
    chart_title.portion_format.font_bold = 1
    chart_title.portion_format.font_italic = 1

    # Установить формат основных линий сетки для оси значений.
    chart.axes.vertical_axis.major_grid_lines_format.line.fill_format.fill_type = slides.FillType.SOLID
    chart.axes.vertical_axis.major_grid_lines_format.line.fill_format.solid_fill_color.color = draw.Color.blue
    chart.axes.vertical_axis.major_grid_lines_format.line.width = 5
    chart.axes.vertical_axis.major_grid_lines_format.line.dash_style = slides.LineDashStyle.DASH_DOT

    # Установить формат вспомогательных линий сетки для оси значений.
    chart.axes.vertical_axis.minor_grid_lines_format.line.fill_format.fill_type = slides.FillType.SOLID
    chart.axes.vertical_axis.minor_grid_lines_format.line.fill_format.solid_fill_color.color = draw.Color.red
    chart.axes.vertical_axis.minor_grid_lines_format.line.width = 3

    # Установить числовой формат оси значений.
    chart.axes.vertical_axis.is_number_format_linked_to_source = False
    chart.axes.vertical_axis.display_unit = charts.DisplayUnitType.THOUSANDS
    chart.axes.vertical_axis.number_format = "0.0%"

    # Установить максимум, минимум, основной и вспомогательный шаги оси значений.
    chart.axes.vertical_axis.is_automatic_major_unit = False
    chart.axes.vertical_axis.is_automatic_max_value = False
    chart.axes.vertical_axis.is_automatic_minor_unit = False
    chart.axes.vertical_axis.is_automatic_min_value = False

    chart.axes.vertical_axis.max_value = 15
    chart.axes.vertical_axis.min_value = -2
    chart.axes.vertical_axis.minor_unit = 0.5
    chart.axes.vertical_axis.major_unit = 2.0

    # Установить свойства текста оси значений.
    vertical_axis_portion_format = chart.axes.vertical_axis.text_format.portion_format
    vertical_axis_portion_format.font_bold = 1
    vertical_axis_portion_format.font_height = 16
    vertical_axis_portion_format.font_italic = 1
    vertical_axis_portion_format.fill_format.fill_type = slides.FillType.SOLID 
    vertical_axis_portion_format.fill_format.solid_fill_color.color = draw.Color.dark_green
    vertical_axis_portion_format.latin_font = slides.FontData("Times New Roman")

    # Установить заголовок оси значений.
    chart.axes.vertical_axis.has_title = True
    chart.axes.vertical_axis.title.add_text_frame_for_overriding("")
    vertical_axis_title = chart.axes.vertical_axis.title.text_frame_for_overriding.paragraphs[0].portions[0]
    vertical_axis_title.text = "Primary Axis"
    vertical_axis_title.portion_format.fill_format.fill_type = slides.FillType.SOLID
    vertical_axis_title.portion_format.fill_format.solid_fill_color.color = draw.Color.gray
    vertical_axis_title.portion_format.font_height = 20
    vertical_axis_title.portion_format.font_bold = 1
    vertical_axis_title.portion_format.font_italic = 1

    # Установить формат основных линий сетки для оси категорий.
    chart.axes.horizontal_axis.major_grid_lines_format.line.fill_format.fill_type = slides.FillType.SOLID
    chart.axes.horizontal_axis.major_grid_lines_format.line.fill_format.solid_fill_color.color = draw.Color.green
    chart.axes.horizontal_axis.major_grid_lines_format.line.width = 5

    # Установить формат вспомогательных линий сетки для оси категорий.
    chart.axes.horizontal_axis.minor_grid_lines_format.line.fill_format.fill_type = slides.FillType.SOLID
    chart.axes.horizontal_axis.minor_grid_lines_format.line.fill_format.solid_fill_color.color = draw.Color.yellow
    chart.axes.horizontal_axis.minor_grid_lines_format.line.width = 3

    # Установить свойства текста оси категорий.
    horizontal_axis_portion_format = chart.axes.horizontal_axis.text_format.portion_format
    horizontal_axis_portion_format.font_bold = 1
    horizontal_axis_portion_format.font_height = 16
    horizontal_axis_portion_format.font_italic = 1
    horizontal_axis_portion_format.fill_format.fill_type = slides.FillType.SOLID 
    horizontal_axis_portion_format.fill_format.solid_fill_color.color = draw.Color.blue
    horizontal_axis_portion_format.latin_font = slides.FontData("Arial")

    # Установить заголовок оси категорий.
    chart.axes.horizontal_axis.has_title = True
    chart.axes.horizontal_axis.title.add_text_frame_for_overriding("")

    horizontal_axis_title = chart.axes.horizontal_axis.title.text_frame_for_overriding.paragraphs[0].portions[0]
    horizontal_axis_title.text = "Sample Category"
    horizontal_axis_title.portion_format.fill_format.fill_type = slides.FillType.SOLID
    horizontal_axis_title.portion_format.fill_format.solid_fill_color.color = draw.Color.gray
    horizontal_axis_title.portion_format.font_height = 20
    horizontal_axis_title.portion_format.font_bold = 1
    horizontal_axis_title.portion_format.font_italic = 1

    # Установить позицию меток оси категорий.
    chart.axes.horizontal_axis.tick_label_position = charts.TickLabelPositionType.LOW

    # Установить угол вращения меток оси категорий.
    chart.axes.horizontal_axis.tick_label_rotation_angle = 45

    # Установить свойства текста легенды.
    legend_portion_format = chart.legend.text_format.portion_format
    legend_portion_format.font_bold = 1
    legend_portion_format.font_height = 16
    legend_portion_format.font_italic = 1
    legend_portion_format.fill_format.fill_type = slides.FillType.SOLID 
    legend_portion_format.fill_format.solid_fill_color.color = draw.Color.dark_red

    # Показать легенду диаграммы, перекрывающую диаграмму.
    chart.legend.overlay = True
                
    # Установить цвет задней стены диаграммы.
    chart.back_wall.thickness = 1
    chart.back_wall.format.fill.fill_type = slides.FillType.SOLID
    chart.back_wall.format.fill.solid_fill_color.color = draw.Color.orange

    chart.floor.format.fill.fill_type = slides.FillType.SOLID
    chart.floor.format.fill.solid_fill_color.color = draw.Color.red

    # Установить цвет области построения.
    chart.plot_area.format.fill.fill_type = slides.FillType.SOLID
    chart.plot_area.format.fill.solid_fill_color.color = draw.Color.light_cyan

    # Save the presentation.
    presentation.save("FormattedChart.pptx", slides.export.SaveFormat.PPTX)

Установка свойств шрифтов диаграммы

Aspose.Slides для Python поддерживает установку свойств шрифтов для диаграмм. Выполните следующие шаги, чтобы настроить шрифты диаграммы:

  1. Создайте объект Presentation.
  2. Добавьте диаграмму на слайд.
  3. Установите высоту шрифта.
  4. Сохраните изменённую презентацию.

Ниже приведён пример кода.

import aspose.slides.charts as charts
import aspose.slides as slides

with slides.Presentation() as presentation:
    slide = presentation.slides[0]

    chart = slide.shapes.add_chart(charts.ChartType.CLUSTERED_COLUMN, 100, 100, 500, 400)
    chart.text_format.portion_format.font_height = 20
    chart.chart_data.series[0].labels.default_data_label_format.show_value = True

    presentation.save("ChartFontProperties.pptx", slides.export.SaveFormat.PPTX)

Установка числового формата

Aspose.Slides для Python предоставляет простой API для управления форматами данных диаграммы:

  1. Создайте экземпляр класса Presentation.
  2. Получите ссылку на слайд по его индексу.
  3. Добавьте диаграмму с данными по умолчанию любого требуемого типа.
  4. Установите предустановленный числовой формат из доступных значений.
  5. Пройдитесь по ячейкам данных диаграммы в каждой серии и задайте числовой формат.
  6. Сохраните презентацию.
  7. Установите пользовательский числовой формат.
  8. Пройдитесь по ячейкам данных диаграммы в каждой серии и задайте другой числовой формат.
  9. Сохраните презентацию.
import aspose.slides.charts as charts
import aspose.slides as slides

# Создать экземпляр класса Presentation.
with slides.Presentation() as presentation:
    # Получить доступ к первому слайду.
    slide = presentation.slides[0]

    # Добавить диаграмму кластерных столбцов по умолчанию.
    chart = slide.shapes.add_chart(charts.ChartType.CLUSTERED_COLUMN, 50, 50, 500, 400)

    # Установить предустановленный числовой формат.
    # Обойти каждую серию диаграммы.
    for series in chart.chart_data.series:
        # Обойти каждую точку данных в серии.
        for cell in series.data_points:
            # Установить числовой формат.
            cell.value.as_cell.preset_number_format = 10  # 0.00%

    # Сохранить презентацию.
    presentation.save("PresetNumberFormat.pptx", slides.export.SaveFormat.PPTX)

Доступные предустановленные числовые форматы и их индексы перечислены ниже.

0 General
1 0
2 0.00
3 #,##0
4 #,##0.00
5 $#,##0;$-#,##0
6 $#,##0;Red$-#,##0
7 $#,##0.00;$-#,##0.00
8 $#,##0.00;Red$-#,##0.00
9 0%
10 0.00%
11 0.00E+00
12 # ?/?
13 # /
14 m/d/yy
15 d-mmm-yy
16 d-mmm
17 mmm-yy
18 h:mm AM/PM
19 h:mm:ss AM/PM
20 h:mm
21 h:mm:ss
22 m/d/yy h:mm
37 #,##0;-#,##0
38 #,##0;Red-#,##0
39 #,##0.00;-#,##0.00
40 #,##0.00;Red-#,##0.00
41 _ * #,##0_ ;_ * “_ ;_ @_
42 _ $* #,##0_ ;_ $* “_ ;_ @_
43 _ * #,##0.00_ ;_ * “??_ ;_ @_
44 _ $* #,##0.00_ ;_ $* “??_ ;_ @_
45 mm:ss
46 h:mm:ss
47 mm:ss.0
48 ##0.0E+00
49 @

Установка скруглённых границ для области диаграммы

Aspose.Slides для Python поддерживает настройку области диаграммы с помощью свойства Chart.has_rounded_corners.

  1. Создайте объект Presentation.
  2. Добавьте диаграмму на слайд.
  3. Установите тип заливки диаграммы и цвет заливки.
  4. Установите свойство скруглённых углов в True.
  5. Сохраните изменённую презентацию.

Ниже приведён пример.

import aspose.slides.charts as charts
import aspose.slides as slides

with slides.Presentation() as presentation:
	slide = presentation.slides[0]

	chart = slide.shapes.add_chart(charts.ChartType.CLUSTERED_COLUMN, 20, 100, 600, 400)
	chart.line_format.fill_format.fill_type = slides.FillType.SOLID
	chart.line_format.style = slides.LineStyle.SINGLE
	chart.has_rounded_corners = True

	presentation.save("RoundedBorders.pptx", slides.export.SaveFormat.PPTX)

FAQ

Можно ли установить полупрозрачные заливки для столбцов/областей, оставив контур непрозрачным?

Да. Прозрачность заливки и контур настраиваются отдельно. Это полезно для повышения читаемости сетки и данных в плотных визуализациях.

Как обращаться с метками данных, когда они перекрываются?

Уменьшите размер шрифта, отключите необязательные компоненты меток (например, категории), задайте смещение/положение метки, при необходимости показывайте метки только для выбранных точек или переключите формат на «значение + легенда».

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

Да. Обычно доступны как сплошные, так и градиентные/узорные заливки. На практике используйте градиенты умеренно и избегайте комбинаций, снижающих контраст с сеткой и текстом.