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 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.

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.