Travailler avec les graphiques
Vue d’ensemble
Aspose.Cells FOSS utilise une API méthode‑par‑type‑de‑graphique. Au lieu d’un appel générique add(ChartType.X, ...), chaque type de graphique possède sa propre méthode dédiée dans la collection charts de la feuille de calcul :
| Méthode | Type de graphique |
|---|---|
ws.charts.add_bar(top_row, left_col, bottom_row, right_col) | Colonne groupée (graphique à barres) |
ws.charts.add_line(top_row, left_col, bottom_row, right_col) | Ligne |
ws.charts.add_pie(top_row, left_col, bottom_row, right_col) | Camembert |
ws.charts.add_area(top_row, left_col, bottom_row, right_col) | Zone |
Tous les quatre paramètres positionnels décrivent la zone rectangulaire dans la feuille où le graphique sera intégré. Les indices de ligne et de colonne sont à base zéro. Chaque méthode renvoie un objet Chart que vous configurez davantage avant l’enregistrement.
Limitation : Seuls les types de graphiques LINE, BAR, PIE, AREA et STOCK peuvent être enregistrés au format XLSX. L’appel de
wb.save()avec un classeur contenant tout autre type de graphique (par ex., SCATTER, WATERFALL, RADAR, TREEMAP, HISTOGRAM) déclencheraNotImplementedError.
Ajout d’un graphique à colonnes
L’exemple ci‑dessous écrit un petit jeu de données de revenus par produit, puis ajoute un graphique à colonnes placé sous les données.
from aspose.cells_foss import Workbook, Cell
workbook = Workbook()
ws = workbook.worksheets[0]
##--- Data ---
ws.cells["A1"].value = "Product"
ws.cells["B1"].value = "Revenue"
products = ["Widget A", "Widget B", "Widget C", "Widget D", "Widget E"]
revenues = [12_500, 18_200, 9_800, 21_400, 15_600]
for i, (product, revenue) in enumerate(zip(products, revenues), start=2):
ws.cells[f"A{i}"].value = product
ws.cells[f"B{i}"].value = revenue
##--- Chart (rows 7–22, columns A–H, all zero-based) ---
##top_row=6, left_col=0, bottom_row=22, right_col=7
chart = ws.charts.add_bar(6, 0, 22, 7)
chart.title = "Revenue by Product"
chart.n_series.add("B2:B6", category_data="A2:A6", name="Revenue (USD)")
chart.show_legend = True
chart.legend_position = "bottom"
workbook.save("column_chart.xlsx")
print("Saved column_chart.xlsx")Les données occupent les lignes 1–6 (lignes indexées à partir de zéro 0–5), donc top_row=6 place le graphique immédiatement en dessous sans chevaucher les données.
Ajout d’un graphique en courbes
Les graphiques en ligne fonctionnent bien pour afficher les tendances au fil du temps. La signature d’appel est identique à add_bar — seul le nom de la méthode change.
from aspose.cells_foss import Workbook, Cell
workbook = Workbook()
ws = workbook.worksheets[0]
##--- Monthly trend data ---
ws.cells["A1"].value = "Month"
ws.cells["B1"].value = "Page Views"
ws.cells["C1"].value = "Conversions"
months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun"]
page_views = [4_200, 5_100, 4_800, 6_300, 7_100, 6_800]
conversions = [ 210, 255, 230, 340, 390, 360]
for i, (month, pv, cv) in enumerate(zip(months, page_views, conversions), start=2):
ws.cells[f"A{i}"].value = month
ws.cells[f"B{i}"].value = pv
ws.cells[f"C{i}"].value = cv
##--- Line chart below the data ---
chart = ws.charts.add_line(8, 0, 24, 8)
chart.title = "Monthly Website Metrics"
chart.n_series.add("B2:B7", category_data="A2:A7", name="Page Views")
chart.n_series.add("C2:C7", category_data="A2:A7", name="Conversions")
chart.show_legend = True
chart.legend_position = "bottom"
workbook.save("line_chart.xlsx")
print("Saved line_chart.xlsx")Titre du graphique et légende
Définissez le titre du graphique en assignant une chaîne simple directement à chart.title. La propriété accepte un str — ne tentez pas d’accéder à une sous‑propriété telle que .title.text, qui n’existe pas dans cette bibliothèque.
##Correct
chart.title = "Quarterly Sales"
##Wrong — raises AttributeError
##chart.title.text = "Quarterly Sales"La visibilité et la position de la légende sont contrôlées par deux propriétés :
chart.show_legend = True # display the legend
chart.legend_position = "bottom" # "bottom", "top", "left", "right"Pour masquer complètement la légende, définissez chart.show_legend = False. La valeur legend_position est ignorée lorsque la légende est masquée.
Configuration de la série de données
Utilisez chart.n_series.add() pour attacher des plages de données à un graphique. Passez tous
les arguments en tant qu’arguments nommés pour éviter la confusion liée à l’ordre positionnel :
chart.n_series.add("B2:B6", category_data="A2:A6", name="Revenue")Vous pouvez ajouter plusieurs séries à un même graphique en appelant n_series.add plus
fois. Chaque appel ajoute une nouvelle série :
from aspose.cells_foss import Workbook, Cell
workbook = Workbook()
ws = workbook.worksheets[0]
##Headers
ws.cells["A1"].value = "Quarter"
ws.cells["B1"].value = "North"
ws.cells["C1"].value = "South"
ws.cells["D1"].value = "East"
data = [
("Q1", 8_400, 6_100, 7_200),
("Q2", 9_200, 7_400, 8_100),
("Q3", 10_500, 8_900, 9_600),
("Q4", 11_800, 9_300, 10_200),
]
for i, row in enumerate(data, start=2):
ws.cells[f"A{i}"].value = row[0]
ws.cells[f"B{i}"].value = row[1]
ws.cells[f"C{i}"].value = row[2]
ws.cells[f"D{i}"].value = row[3]
chart = ws.charts.add_bar(6, 0, 22, 8)
chart.title = "Regional Sales by Quarter"
chart.n_series.add("B2:B5", category_data="A2:A5", name="North")
chart.n_series.add("C2:C5", category_data="A2:A5", name="South")
chart.n_series.add("D2:D5", category_data="A2:A5", name="East")
chart.show_legend = True
chart.legend_position = "bottom"
workbook.save("multi_series_chart.xlsx")
print("Saved multi_series_chart.xlsx")Données de catégorie
Les étiquettes de catégorie peuvent être définies au niveau du graphique ou au niveau de chaque série.
Données de catégorie au niveau du graphique s’appliquent à toutes les séries par défaut:
chart.category_data = "A2:A5"Données de catégorie au niveau de la série (via l’argument mot‑clé category_data de n_series.add) remplace le paramètre au niveau du graphique pour cette série spécifique :
chart.n_series.add("B2:B5", category_data="A2:A5", name="Revenue")Lorsque chaque série partage la même plage de catégories, définir chart.category_data
une fois est plus concis. Lorsque les séries ont des plages de catégories différentes — par exemple,
deux ensembles de données avec des périodes temporelles différentes — utilisez l’argument mot‑clé par série
à la place.
Positionnement du graphique
Les quatre paramètres positionnels de chaque méthode add_* définissent un rectangle englobant dans la feuille, mesuré en indices de lignes et de colonnes à base zéro :
add_bar(top_row, left_col, bottom_row, right_col)| Paramètre | Signification |
|---|---|
top_row | Indice basé sur zéro de la première ligne occupée par le graphique |
left_col | Indice basé sur zéro de la colonne la plus à gauche |
bottom_row | Indice basé sur zéro de la dernière ligne occupée par le graphique |
right_col | Indice basé sur zéro de la colonne la plus à droite |
Un schéma courant consiste à placer le graphique directement sous les données. Si vos données se terminent à la ligne 6 d’Excel (indice de ligne zéro‑based 5), commencez le graphique à top_row=6 :
from aspose.cells_foss import Workbook, Cell
workbook = Workbook()
ws = workbook.worksheets[0]
##Data in rows 1–5 (zero-based 0–4)
labels = ["Alpha", "Beta", "Gamma", "Delta", "Epsilon"]
values = [30, 45, 28, 60, 52]
ws.cells["A1"].value = "Category"
ws.cells["B1"].value = "Score"
for i, (label, val) in enumerate(zip(labels, values), start=2):
ws.cells[f"A{i}"].value = label
ws.cells[f"B{i}"].value = val
##Data ends at zero-based row 5 (Excel row 6).
##Place chart from row 6 to row 22, columns A–H (0–7).
chart = ws.charts.add_bar(6, 0, 22, 7)
chart.title = "Category Scores"
chart.n_series.add("B2:B6", category_data="A2:A6", name="Score")
chart.show_legend = False
workbook.save("positioned_chart.xlsx")
print("Saved positioned_chart.xlsx")Rendez le graphique suffisamment haut pour être lisible : une hauteur d’au moins 15 lignes
(bottom_row - top_row >= 15) et une largeur d’au moins 6 colonnes constitue un point de départ raisonnable.
Erreurs courantes
| Incorrect | Correct | Pourquoi |
|---|---|---|
ws.charts.add(ChartType.COLUMN, ...) | ws.charts.add_bar(...) | Ne pas appeler ws.charts.add(ChartType.X, ...) directement pour les types non pris en charge — cela déclenchera NotImplementedError pour 11 des 16 types de graphiques. Utilisez add_bar(), add_line(), add_pie(), add_area() ou add_stock() à la place. |
chart.title.text = "My Chart" | chart.title = "My Chart" | chart.title est une propriété de chaîne simple, pas un objet avec une sous‑propriété .text. |
chart.n_series.add("B2:B5", "A2:A5", "Revenue") | chart.n_series.add("B2:B5", category_data="A2:A5", name="Revenue") | Les deuxième et troisième paramètres doivent être passés en tant qu’arguments nommés pour éviter toute ambiguïté. |
chart = ws.charts.add_bar(0, 0, 15, 7) (chevauche les données) | Placez top_row sous la dernière ligne de données | Un graphique qui chevauche les données masque les valeurs et entraîne des mises en page confuses. |
chart.legend_position = "bottom" sans chart.show_legend = True | Définissez chart.show_legend = True d’abord | legend_position n’a aucun effet lorsque show_legend est False. |
Voir aussi
- Référence de l’API : Documentation complète des classes et méthodes pour
aspose.cells_foss - Base de connaissances : Guides pratiques orientés tâches
- Vue d’ensemble du produit : Résumé des fonctionnalités et capacités
- Démarrage / Installation : Installation et configuration avec pip
- Blog : Tutoriel sur les graphiques Excel en Python : Guide de création de graphiques étape par étape