Personalizar ejes de gráficos en presentaciones con Python
Visión general
Este artículo explica cómo personalizar los ejes de los gráficos con Aspose.Slides for Python via .NET. Cubre los valores calculados de los ejes, el intercambio de filas y columnas del gráfico, la visibilidad de los ejes, los intervalos de etiquetas de categoría y de marcas de graduación, las categorías de fecha y el formato, la rotación del título, la posición del eje y las unidades de visualización.
Obtener los valores máximos en el eje vertical de los gráficos
Cree una Presentation y añada un gráfico de áreas con datos predeterminados. Llame a validate_chart_layout antes de leer los valores calculados del eje para que el diseño del gráfico esté actualizado.
Lea actual_max_value y actual_min_value para los límites del eje, y actual_major_unit y actual_minor_unit para los intervalos de marcas. actual_major_unit_scale y actual_minor_unit_scale proporcionan escalas de unidades de tiempo, relevantes para los ejes de fecha. El ejemplo almacena estos valores en variables locales y guarda el gráfico.
import aspose.slides as slides
import aspose.slides.charts as charts
with slides.Presentation() as presentation:
slide = presentation.slides[0]
chart = slide.shapes.add_chart(charts.ChartType.AREA, 100, 100, 500, 350)
chart.validate_chart_layout()
max_value = chart.axes.vertical_axis.actual_max_value
min_value = chart.axes.vertical_axis.actual_min_value
major_unit = chart.axes.vertical_axis.actual_major_unit
minor_unit = chart.axes.vertical_axis.actual_minor_unit
major_unit_scale = chart.axes.vertical_axis.actual_major_unit_scale
minor_unit_scale = chart.axes.vertical_axis.actual_minor_unit_scale
presentation.save("AxisValues_out.pptx", slides.export.SaveFormat.PPTX)
Intercambiar los datos entre ejes
Utilice switch_row_column para intercambiar los roles de series y categorías en los datos del gráfico. Cada categoría anterior se convierte en una serie, y cada serie anterior en una categoría. Esto cambia la forma en que se agrupan los datos; no intercambia los ejes horizontal y vertical. El ejemplo usa set_range para enlazar los datos predeterminados a Sheet1!A1:D5, incluida la fila de encabezado y la columna de categorías, antes de intercambiar filas y columnas. Guarda un gráfico con cuatro series y tres categorías.
import aspose.slides as slides
import aspose.slides.charts as charts
with slides.Presentation() as presentation:
slide = presentation.slides[0]
chart = slide.shapes.add_chart(charts.ChartType.CLUSTERED_COLUMN, 100, 100, 400, 300)
chart.chart_data.set_range("Sheet1!A1:D5")
chart.chart_data.switch_row_column()
presentation.save("SwitchChartRowColumns_out.pptx", slides.export.SaveFormat.PPTX)
Desactivar el eje vertical en gráficos de líneas
Establezca is_visible a False en el eje vertical para ocultarlo. El ejemplo crea un gráfico de líneas con datos predeterminados y lo guarda con el eje vertical oculto.
import aspose.slides as slides
import aspose.slides.charts as charts
with slides.Presentation() as presentation:
slide = presentation.slides[0]
chart = slide.shapes.add_chart(charts.ChartType.LINE, 100, 100, 400, 300)
chart.axes.vertical_axis.is_visible = False
presentation.save("HiddenVerticalAxis.pptx", slides.export.SaveFormat.PPTX)
Desactivar el eje horizontal en gráficos de líneas
Establezca is_visible a False en el eje horizontal para ocultarlo. El ejemplo crea un gráfico de líneas con datos predeterminados y lo guarda con el eje horizontal oculto.
import aspose.slides as slides
import aspose.slides.charts as charts
with slides.Presentation() as presentation:
slide = presentation.slides[0]
chart = slide.shapes.add_chart(charts.ChartType.LINE, 100, 100, 400, 300)
chart.axes.horizontal_axis.is_visible = False
presentation.save("HiddenHorizontalAxis.pptx", slides.export.SaveFormat.PPTX)
Cambiar un eje de categorías
Establezca category_axis_type para elegir un eje de categoría de tipo fecha o texto. Este ejemplo requiere ExistingChart.pptx, con un gráfico como la primera forma en la primera diapositiva y celdas de categoría que contienen valores de fecha numéricos de Excel. Cambia el eje horizontal a un eje de fecha. Configurar is_automatic_major_unit a False, major_unit a 1 y major_unit_scale a months coloca marcas principales en intervalos de un mes.
import aspose.slides as slides
import aspose.slides.charts as charts
with slides.Presentation("ExistingChart.pptx") as presentation:
slide = presentation.slides[0]
chart = slide.shapes[0]
chart.axes.horizontal_axis.category_axis_type = charts.CategoryAxisType.DATE
chart.axes.horizontal_axis.is_automatic_major_unit = False
chart.axes.horizontal_axis.major_unit = 1
chart.axes.horizontal_axis.major_unit_scale = charts.TimeUnitType.MONTHS
presentation.save("ChangeChartCategoryAxis_out.pptx", slides.export.SaveFormat.PPTX)
Controlar los intervalos de etiquetas del eje de categorías
Cuando un gráfico tiene muchas categorías, reduzca el número de etiquetas de eje visibles sin eliminar categorías ni puntos de datos. Establezca is_automatic_tick_label_spacing a False, luego establezca tick_label_spacing al intervalo de categoría deseado. Para categorías de texto en su orden normal, el recuento comienza en la primera categoría:
| Intervalo | Etiquetas mostradas en el ejemplo |
|---|---|
1 |
Categoría 1, Categoría 2, Categoría 3, … Categoría 24 |
2 |
Categoría 1, Categoría 3, Categoría 5, … Categoría 23 |
3 |
Categoría 1, Categoría 4, Categoría 7, … Categoría 22 |
Un intervalo de 3 muestra cada tercera etiqueta, dejando dos etiquetas ocultas entre las mostradas. No elimina las columnas correspondientes. El espaciado automático elige un intervalo según el espacio disponible; no muestra necesariamente todas las etiquetas.
Las marcas de graduación tienen controles independientes. Establezca is_automatic_tick_marks_spacing a False y use tick_marks_spacing para fijar su intervalo. Por ejemplo, 1 mantiene una marca en cada intervalo de categoría mientras las etiquetas aparecen solo cada tercera categoría. Establezca major_tick_mark a un estilo visible para que pueda ver el resultado. Configurar cualquiera de las propiedades de espaciado automático a True permite que el gráfico elija ese intervalo nuevamente.
El siguiente ejemplo autónomo crea 24 categorías y una serie, y guarda tres diapositivas en CategoryAxisIntervals.pptx: espaciado automático, espaciado manual de etiquetas con marcas de graduación independientes y espaciado automático restaurado. Las dos copias conservan los datos originales del gráfico. No se necesita una presentación de entrada. El texto horizontal de las etiquetas hace que la diferencia de densidad sea fácil de observar.
import aspose.slides as slides
import aspose.slides.charts as charts
with slides.Presentation() as presentation:
slide = presentation.slides[0]
chart = slide.shapes.add_chart(charts.ChartType.CLUSTERED_COLUMN, 30, 40, 660, 320)
chart.has_legend = False
chart.chart_data.categories.clear()
chart.chart_data.series.clear()
workbook = chart.chart_data.chart_data_workbook
workbook.clear(0)
series = chart.chart_data.series.add(charts.ChartType.CLUSTERED_COLUMN)
for i in range(24):
category_cell = workbook.get_cell(0, i + 1, 0, f"Category {i + 1}")
chart.chart_data.categories.add(category_cell)
value_cell = workbook.get_cell(0, i + 1, 1, 10 + i % 6 * 5)
series.data_points.add_data_point_for_bar_series(value_cell)
axis = chart.axes.horizontal_axis
axis.category_axis_type = charts.CategoryAxisType.TEXT
axis.text_format.text_block_format.rotation_angle = 0
axis.text_format.portion_format.font_height = 12
axis.major_tick_mark = charts.TickMarkType.OUTSIDE
axis.is_automatic_tick_label_spacing = True
axis.is_automatic_tick_marks_spacing = True
# Diapositiva 2: mostrar cada tercera etiqueta, pero mantener una marca de graduación para cada categoría.
manual_slide = presentation.slides.add_clone(slide)
manual_chart = manual_slide.shapes[0]
manual_axis = manual_chart.axes.horizontal_axis
manual_axis.is_automatic_tick_label_spacing = False
manual_axis.tick_label_spacing = 3
manual_axis.is_automatic_tick_marks_spacing = False
manual_axis.tick_marks_spacing = 1
# Diapositiva 3: permitir que el gráfico elija ambos intervalos de nuevo.
restored_slide = presentation.slides.add_clone(manual_slide)
restored_chart = restored_slide.shapes[0]
restored_chart.axes.horizontal_axis.is_automatic_tick_label_spacing = True
restored_chart.axes.horizontal_axis.is_automatic_tick_marks_spacing = True
presentation.save("CategoryAxisIntervals.pptx", slides.export.SaveFormat.PPTX)
Espaciado automático (diapositiva 1): En esta representación, se muestra cada segunda etiqueta de categoría y se ajusta en dos líneas. El resultado automático puede variar según el tamaño del gráfico, las fuentes y el motor de renderizado.

Espaciado manual (diapositiva 2): Cada tercera etiqueta se muestra en una línea, mientras que las marcas de graduación permanecen en cada intervalo de categoría. Las 24 columnas, incluidas las que no tienen etiquetas, permanecen visibles con los mismos valores. La diapositiva 3 restaura la apariencia automática mostrada arriba.

Elegir el eje y intervalo correctos
Utilice este intervalo de recuento de categorías para un eje de categoría de texto, como el eje de categorías de un gráfico de columnas, líneas, áreas o barras. En un gráfico de columnas, es el eje horizontal. En un gráfico de barras horizontales, el eje de categorías es vertical, por lo que aplique estas configuraciones a vertical_axis. El espaciado de marcas de graduación también se aplica a un eje de series en los gráficos que lo tienen.
No utilice el espaciado de etiquetas de categoría para establecer la escala numérica de un eje de valores. En un eje de valores, major_unit especifica una diferencia en los valores: por ejemplo, una unidad principal de 10 produce marcas en 0, 10, 20, etc., cuando el eje comienza en cero. Un intervalo de etiquetas de categoría de 3 cuenta posiciones de categoría, independientemente de sus valores de datos. Los gráficos de dispersión y de burbujas usan ejes de valores en lugar de un eje de categoría de texto. Para un eje de fecha, utilice unidades principales y escalas basadas en el tiempo como se describe en Cambiar un eje de categorías.
Establecer el formato de fecha para los valores del eje de categorías
El ejemplo reemplaza los datos predeterminados del gráfico con cuatro valores anuales. Las fechas se almacenan como números de serie OLE Automation en la primera hoja de cálculo (índice 0). Establezca category_axis_type a un eje de fecha, desactive is_number_format_linked_to_source y asigne yyyy a number_format para que las etiquetas de categoría muestren años de cuatro dígitos independientemente del formato de celda.
from datetime import date
import aspose.slides as slides
import aspose.slides.charts as charts
with slides.Presentation() as presentation:
slide = presentation.slides[0]
chart = slide.shapes.add_chart(charts.ChartType.LINE, 50, 50, 450, 300)
chart.chart_data.categories.clear()
chart.chart_data.series.clear()
workbook = chart.chart_data.chart_data_workbook
workbook.clear(0)
series = chart.chart_data.series.add(charts.ChartType.LINE)
for i in range(4):
category_date = date(2015 + i, 1, 1)
serial_date = (category_date - date(1899, 12, 30)).days
category_cell = workbook.get_cell(0, i + 1, 0, serial_date)
chart.chart_data.categories.add(category_cell)
value_cell = workbook.get_cell(0, i + 1, 1, i + 1)
series.data_points.add_data_point_for_line_series(value_cell)
chart.axes.horizontal_axis.category_axis_type = charts.CategoryAxisType.DATE
chart.axes.horizontal_axis.is_number_format_linked_to_source = False
chart.axes.horizontal_axis.number_format = "yyyy"
presentation.save("DateAxisFormat.pptx", slides.export.SaveFormat.PPTX)
Establecer un ángulo de rotación para el título del eje del gráfico
Habilite has_title en el eje vertical, proporcione el texto del título y establezca rotation_angle para rotar el título. El ángulo se mide en grados; este ejemplo guarda un gráfico de columnas con su título del eje de valores girado 90 grados.
import aspose.slides as slides
import aspose.slides.charts as charts
with slides.Presentation() as presentation:
slide = presentation.slides[0]
chart = slide.shapes.add_chart(charts.ChartType.CLUSTERED_COLUMN, 50, 50, 450, 300)
chart.axes.vertical_axis.has_title = True
chart.axes.vertical_axis.title.add_text_frame_for_overriding("Value")
chart.axes.vertical_axis.title.text_format.text_block_format.rotation_angle = 90
presentation.save("RotatedAxisTitle.pptx", slides.export.SaveFormat.PPTX)
Establecer la posición del eje en un eje de categoría o de valor
Utilice axis_between_categories para controlar si el eje de valores cruza el eje de categoría entre categorías o en las marcas de categoría. Esta propiedad se aplica a los ejes de categoría. El ejemplo lo establece a True en el eje de categoría horizontal de un gráfico de columnas y guarda el resultado.
import aspose.slides as slides
import aspose.slides.charts as charts
with slides.Presentation() as presentation:
slide = presentation.slides[0]
chart = slide.shapes.add_chart(charts.ChartType.CLUSTERED_COLUMN, 50, 50, 450, 300)
chart.axes.horizontal_axis.axis_between_categories = True
presentation.save("AxisBetweenCategories.pptx", slides.export.SaveFormat.PPTX)
Establecer la unidad de visualización en un eje de valor del gráfico
Establezca display_unit para escalar las etiquetas en un eje de valor sin cambiar los datos subyacentes. Con DisplayUnitType configurado a MILLIONS, un valor de 60 000 000 se muestra como 60. El ejemplo crea un gráfico de columnas y aplica la unidad de visualización en millones a su eje vertical.
import aspose.slides as slides
import aspose.slides.charts as charts
with slides.Presentation() as presentation:
slide = presentation.slides[0]
chart = slide.shapes.add_chart(charts.ChartType.CLUSTERED_COLUMN, 50, 50, 450, 300)
chart.axes.vertical_axis.display_unit = charts.DisplayUnitType.MILLIONS
presentation.save("Result.pptx", slides.export.SaveFormat.PPTX)
Preguntas frecuentes
¿Cómo establezco el valor en el que un eje cruza al otro (cruce del eje)?
Utilice cross_type para seleccionar el comportamiento de cruce. Para especificar un valor numérico de cruce, establezca cross_at. Estas configuraciones le permiten mover el cruce del eje a una línea base adecuada.
¿Cómo puedo posicionar las etiquetas de marcas respecto al eje?
Establezca tick_label_position usando TickLabelPositionType: LOW, HIGH, NEXT_TO o NONE. Para controlar las propias marcas de graduación, utilice major_tick_mark o minor_tick_mark; son independientes del posicionamiento de las etiquetas.