Personnaliser les axes de graphique dans les présentations avec Python

Vue d’ensemble

Cet article explique comment personnaliser les axes de graphiques avec Aspose.Slides for Python via .NET. Il couvre les valeurs d’axe calculées, le basculement des lignes et colonnes du graphique, la visibilité des axes, les intervalles d’étiquettes de catégorie et de repères, les catégories de dates et leur formatage, la rotation du titre, le positionnement des axes et les unités d’affichage.

Obtenir les valeurs maximales sur l’axe vertical des graphiques

Créez une Présentation et ajoutez un graphique en aires avec les données par défaut. Appelez validate_chart_layout avant de lire les valeurs d’axe calculées afin que la disposition du graphique soit à jour.

Lisez actual_max_value, actual_min_value pour les limites de l’axe, ainsi que actual_major_unit et actual_minor_unit pour les intervalles de repères. actual_major_unit_scale et actual_minor_unit_scale fournissent les échelles d’unités de temps, pertinentes pour les axes de dates. L’exemple stocke ces valeurs dans des variables locales et enregistre le graphique.

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)

Échanger les données entre les axes

Utilisez switch_row_column pour échanger les rôles des séries et des catégories dans les données du graphique. Chaque ancienne catégorie devient une série, et chaque ancienne série devient une catégorie. Cela modifie la façon dont les données sont groupées ; cela n’échange pas les axes horizontal et vertical. L’exemple utilise set_range pour lier les données par défaut à Sheet1!A1:D5, incluant la ligne d’en-tête et la colonne de catégorie, avant de permuter les lignes et colonnes. Il enregistre un graphique avec quatre séries et trois catégories.

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)

Désactiver l’axe vertical pour les graphiques en courbes

Définissez is_visible à False sur l’axe vertical pour le masquer. L’exemple crée un graphique en courbes avec les données par défaut et l’enregistre avec l’axe vertical masqué.

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)

Désactiver l’axe horizontal pour les graphiques en courbes

Définissez is_visible à False sur l’axe horizontal pour le masquer. L’exemple crée un graphique en courbes avec les données par défaut et l’enregistre avec l’axe horizontal masqué.

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)

Modifier un axe de catégorie

Définissez category_axis_type pour choisir un axe de catégorie de date ou de texte. Cet exemple nécessite ExistingChart.pptx, avec un graphique comme première forme de la première diapositive et des cellules de catégorie contenant des valeurs de date Excel numériques. Il change l’axe horizontal en axe de date. En réglant is_automatic_major_unit à False, major_unit à 1 et major_unit_scale sur mois, les repères majeurs sont placés à intervalles d’un mois.

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)

Contrôler les intervalles des étiquettes de l’axe de catégorie

Lorsqu’un graphique possède de nombreuses catégories, réduisez le nombre d’étiquettes d’axe visibles sans supprimer les catégories ni les points de données. Réglez is_automatic_tick_label_spacing sur False, puis définissez tick_label_spacing à l’intervalle de catégorie souhaité. Pour les catégories de texte dans leur ordre normal, le comptage commence à la première catégorie :

Intervalle Étiquettes affichées dans l’exemple
1 Catégorie 1, Catégorie 2, Catégorie 3, … Catégorie 24
2 Catégorie 1, Catégorie 3, Catégorie 5, … Catégorie 23
3 Catégorie 1, Catégorie 4, Catégorie 7, … Catégorie 22

Un intervalle de 3 affiche chaque troisième étiquette, en laissant deux étiquettes masquées entre les étiquettes affichées. Cela ne supprime pas les colonnes correspondantes. L’espacement automatique choisit un intervalle en fonction de l’espace disponible ; il n’affiche pas nécessairement chaque étiquette.

Les repères ont des contrôles séparés. Réglez is_automatic_tick_marks_spacing sur False et utilisez tick_marks_spacing pour définir leur intervalle. Par exemple, 1 conserve un repère à chaque intervalle de catégorie tandis que les étiquettes n’apparaissent que toutes les trois catégories. Définissez major_tick_mark sur un style visible afin de voir le résultat. Revenir à True pour l’une ou l’autre propriété d’espacement automatique permet au graphique de choisir à nouveau cet intervalle.

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

    # Diapositive 2 : afficher chaque troisième étiquette, mais conserver un repère pour chaque catégorie.
    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

    # Diapositive 3 : laisser le graphique choisir à nouveau les deux intervalles.
    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)

Espacement automatique (diapositive 1) : Dans ce rendu, chaque deuxième étiquette de catégorie est affichée et se répartit sur deux lignes. Le résultat automatique peut varier selon la taille du graphique, les polices et le moteur de rendu.

Espacement automatique des étiquettes de catégorie avec les 24 colonnes visibles

Espacement manuel (diapositive 2) : Chaque troisième étiquette est affichée sur une ligne, tandis que les repères restent à chaque intervalle de catégorie. Les 24 colonnes, y compris celles sans étiquettes, restent visibles avec les mêmes valeurs. La diapositive 3 restaure l’apparence automatique montrée ci‑dessus.

Intervalle d’étiquettes de catégorie manuel de trois avec les 24 colonnes visibles

Choisir l’axe et l’intervalle corrects

Utilisez cet intervalle de comptage de catégories pour un axe de catégorie texte, tel que l’axe de catégorie d’un graphique en colonnes, en lignes, en aires ou en barres. Dans un graphique en colonnes, il s’agit de l’axe horizontal. Dans un graphique à barres horizontales, l’axe de catégorie est vertical, appliquez donc ces réglages à vertical_axis. L’espacement des repères s’applique également à un axe de série dans les graphiques qui en possèdent un.

N’utilisez pas l’espacement des étiquettes de catégorie pour définir l’échelle numérique d’un axe de valeur. Sur un axe de valeur, major_unit spécifie une différence de valeurs : par exemple, une unité majeure de 10 crée des repères à 0, 10, 20, etc. lorsque l’axe démarre à zéro. Un intervalle d’étiquette de catégorie de 3 compte quant à lui les positions de catégorie, quelles que soient leurs valeurs de données. Les graphiques en nuage de points et bulles utilisent des axes de valeur plutôt qu’un axe de catégorie texte. Pour un axe de date, utilisez les unités majeures basées sur le temps et les échelles décrites dans Modifier un axe de catégorie.

Définir le format de date pour les valeurs de l’axe de catégorie

L’exemple remplace les données du graphique par défaut par quatre valeurs annuelles. Les dates sont stockées sous forme de nombres de série OLE Automation dans la première feuille de calcul (indice 0). Définissez category_axis_type sur un axe de date, désactivez is_number_format_linked_to_source et affectez yyyy à number_format afin que les étiquettes de catégorie affichent les années sur quatre chiffres, indépendamment du format de cellule.

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)

Définir un angle de rotation pour le titre d’un axe de graphique

Activez has_title sur l’axe vertical, fournissez le texte du titre et définissez rotation_angle pour faire pivoter le titre. L’angle est mesuré en degrés ; cet exemple enregistre un graphique en colonnes avec le titre de l’axe de valeur pivoté de 90 degrés.

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)

Définir la position de l’axe sur un axe de catégorie ou de valeur

Utilisez axis_between_categories pour contrôler si l’axe de valeur croise l’axe de catégorie entre les catégories ou aux marques de catégorie. Cette propriété s’applique aux axes de catégorie. L’exemple la définit sur True pour l’axe de catégorie horizontal d’un graphique en colonnes et enregistre le résultat.

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)

Définir l’unité d’affichage sur un axe de valeur de graphique

Définissez display_unit pour mettre à l’échelle les étiquettes d’un axe de valeur sans modifier les données sous‑jacentes. Avec DisplayUnitType réglé sur MILLIONS, une valeur de 60 000 000 est affichée comme 60. L’exemple crée un graphique en colonnes et applique l’unité d’affichage millions à son axe 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)

FAQ

Comment définir la valeur à laquelle un axe croise l’autre (croisement d’axe) ?

Utilisez cross_type pour sélectionner le comportement de croisement. Pour spécifier une valeur numérique de croisement, définissez cross_at. Ces paramètres vous permettent de déplacer le croisement de l’axe à une base appropriée.

Comment positionner les étiquettes de repère par rapport à l’axe ?

Définissez tick_label_position à l’aide de TickLabelPositionType : LOW, HIGH, NEXT_TO ou NONE. Pour contrôler les repères eux‑mêmes, utilisez major_tick_mark ou minor_tick_mark ; ceux‑ci sont indépendants du positionnement des étiquettes.