Formatear gráficos en presentaciones usando Python

Descripción general

Esta guía muestra cómo dar formato a los gráficos de PowerPoint usando Aspose.Slides para Python. Recorre la personalización de los elementos principales del gráfico, como los ejes de categorías y valores, líneas de cuadrícula, etiquetas, títulos, leyendas y ejes secundarios, y demuestra cómo controlar fuentes, formatos numéricos, rellenos, contornos, colores del área del gráfico y la pared trasera, y esquinas redondeadas del gráfico con ejemplos de código concisos y ejecutables. Siguiendo los ejemplos paso a paso, creará una Presentation, añadirá y configurará un gráfico y guardará el resultado en PPTX aplicando ajustes visuales y tipográficos precisos.

Dar formato a los elementos del gráfico

Aspose.Slides para Python permite a los desarrolladores añadir gráficos personalizados a sus diapositivas desde cero. Esta sección explica cómo dar formato a varios elementos del gráfico, incluidos los ejes de categorías y valores.

Aspose.Slides proporciona una API sencilla para gestionar los elementos del gráfico y aplicar formato personalizado:

  1. Cree una instancia de la clase Presentation.
  2. Obtenga una referencia a la diapositiva por su índice.
  3. Añada un gráfico con datos predeterminados del tipo deseado (en este ejemplo, ChartType.LINE_WITH_MARKERS).
  4. Acceda al eje de valores del gráfico y establezca lo siguiente:
    1. Establezca el formato de línea para las líneas de cuadrícula principales del eje de valores.
    2. Establezca el formato de línea para las líneas de cuadrícula menores del eje de valores.
    3. Establezca el formato numérico para el eje de valores.
    4. Establezca las unidades mín., máx., principales y menores para el eje de valores.
    5. Establezca las propiedades de texto para las etiquetas del eje de valores.
    6. Establezca el título del eje de valores.
    7. Establezca el formato de línea para el eje de valores.
  5. Acceda al eje de categorías del gráfico y establezca lo siguiente:
    1. Establezca el formato de línea para las líneas de cuadrícula principales del eje de categorías.
    2. Establezca el formato de línea para las líneas de cuadrícula menores del eje de categorías.
    3. Establezca las propiedades de texto para las etiquetas del eje de categorías.
    4. Establezca el título del eje de categorías.
    5. Establezca la posicionamiento de etiquetas para el eje de categorías.
    6. Establezca el ángulo de rotación para las etiquetas del eje de categorías.
  6. Acceda a la leyenda del gráfico y establezca sus propiedades de texto.
  7. Muestre la leyenda del gráfico sin que se superponga al gráfico.
  8. Acceda al eje de valores secundario del gráfico y establezca lo siguiente:
    1. Habilite el eje de valores secundario.
    2. Establezca el formato de línea para el eje de valores secundario.
    3. Establezca el formato numérico para el eje de valores secundario.
    4. Establezca las unidades mín., máx., principales y menores para el eje de valores secundario.
  9. Dibuje la primera serie del gráfico en el eje de valores secundario.
  10. Establezca el color de relleno de la pared trasera del gráfico.
  11. Establezca el color de relleno del área de trazado del gráfico.
  12. Escriba la presentación modificada en un archivo PPTX.
import aspose.slides.charts as charts
import aspose.slides as slides
import aspose.pydrawing as draw

# Instanciar la clase Presentation.
with slides.Presentation() as presentation:

    # Acceder a la primera diapositiva.
    slide = presentation.slides[0]

    # Añadir un gráfico de ejemplo.
    chart = slide.shapes.add_chart(charts.ChartType.LINE_WITH_MARKERS, 50, 50, 500, 400)

    # Establecer el título del gráfico.
    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

    # Establecer el formato de la línea de cuadrícula principal para el eje de valores.
    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

    # Establecer el formato de la línea de cuadrícula menor para el eje de valores.
    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

    # Establecer el formato numérico del eje de valores.
    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%"

    # Establecer el máximo, mínimo, unidad principal y unidad menor del eje de valores.
    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

    # Establecer las propiedades de texto del eje de valores.
    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")

    # Establecer el título del eje de valores.
    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

    # Establecer el formato de la línea de cuadrícula principal para el eje de categorías.
    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

    # Establecer el formato de la línea de cuadrícula menor para el eje de categorías.
    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

    # Establecer las propiedades de texto del eje de categorías.
    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")

    # Establecer el título del eje de categorías.
    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

    # Establecer la posición de la etiqueta del eje de categorías.
    chart.axes.horizontal_axis.tick_label_position = charts.TickLabelPositionType.LOW

    # Establecer el ángulo de rotación de la etiqueta del eje de categorías.
    chart.axes.horizontal_axis.tick_label_rotation_angle = 45

    # Establecer las propiedades de texto de la leyenda.
    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

    # Mostrar la leyenda del gráfico superponiéndose al gráfico.
    chart.legend.overlay = True
                
    # Establecer el color de la pared trasera del gráfico.
    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

    # Establecer el color del área de trazado.
    chart.plot_area.format.fill.fill_type = slides.FillType.SOLID
    chart.plot_area.format.fill.solid_fill_color.color = draw.Color.light_cyan

    # Guardar la presentación.
    presentation.save("FormattedChart.pptx", slides.export.SaveFormat.PPTX)

Establecer propiedades de fuente del gráfico

Aspose.Slides para Python admite la configuración de propiedades relacionadas con fuentes para los gráficos. Siga los pasos a continuación para configurar las propiedades de fuente del gráfico:

  1. Instancie un objeto Presentation.
  2. Añada un gráfico a la diapositiva.
  3. Establezca la altura de la fuente.
  4. Guarde la presentación modificada.

A continuación se proporciona un código de ejemplo.

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)

Establecer formato numérico

Aspose.Slides para Python ofrece una API sencilla para gestionar los formatos de datos del gráfico:

  1. Cree una instancia de la clase Presentation.
  2. Obtenga una referencia a la diapositiva por su índice.
  3. Añada un gráfico con datos predeterminados de cualquier tipo deseado.
  4. Establezca un formato numérico predeterminado de los valores disponibles.
  5. Recorra las celdas de datos del gráfico en cada serie y establezca el formato numérico.
  6. Guarde la presentación.
  7. Establezca un formato numérico personalizado.
  8. Recorra las celdas de datos del gráfico en cada serie y establezca un formato numérico diferente.
  9. Guarde la presentación.
import aspose.slides.charts as charts
import aspose.slides as slides

# Instanciar la clase Presentation.
with slides.Presentation() as presentation:
    # Acceder a la primera diapositiva.
    slide = presentation.slides[0]

    # Añadir un gráfico de columnas agrupadas predeterminado.
    chart = slide.shapes.add_chart(charts.ChartType.CLUSTERED_COLUMN, 50, 50, 500, 400)

    # Establecer el formato numérico predefinido.
    # Recorrer cada serie del gráfico.
    for series in chart.chart_data.series:
        # Recorrer cada punto de datos en la serie.
        for cell in series.data_points:
            # Establecer el formato numérico.
            cell.value.as_cell.preset_number_format = 10  # 0.00%

    # Guardar la presentación.
    presentation.save("PresetNumberFormat.pptx", slides.export.SaveFormat.PPTX)

Los formatos numéricos predeterminados disponibles y sus índices correspondientes se enumeran a continuación.

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 @

Establecer bordes redondeados para el área del gráfico

Aspose.Slides para Python admite la configuración del área del gráfico mediante la propiedad Chart.has_rounded_corners.

  1. Instancie un objeto Presentation.
  2. Añada un gráfico a la diapositiva.
  3. Establezca el tipo de relleno y el color de relleno del gráfico.
  4. Establezca la propiedad de esquinas redondeadas a True.
  5. Guarde la presentación modificada.

A continuación se muestra un ejemplo.

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)

Preguntas frecuentes

¿Puedo establecer rellenos semitransparentes para columnas/áreas mientras mantengo el borde opaco?

Sí. La transparencia del relleno y el contorno se configuran por separado. Esto es útil para mejorar la legibilidad de la cuadrícula y los datos en visualizaciones densas.

¿Cómo puedo manejar las etiquetas de datos cuando se superponen?

Reduzca el tamaño de la fuente, desactive componentes de etiqueta no esenciales (por ejemplo, categorías), ajuste el desplazamiento/posición de la etiqueta, muestre etiquetas solo para puntos seleccionados si es necesario, o cambie el formato a “valor + leyenda”.

¿Puedo aplicar rellenos degradados o de patrón a las series?

Sí. Normalmente están disponibles tanto rellenos sólidos como degradados/patrón. En la práctica, utilice degradados con moderación y evite combinaciones que reduzcan el contraste con la cuadrícula y el texto.