Werken met grafieken
Overzicht
Aspose.Cells FOSS uses a method-per-chart-type API. Instead of a generic add(ChartType.X, ...) aanroep, elk grafiektype heeft zijn eigen toegewijde methode op van het werkblad charts collectie:
| Methode | Grafiektype |
|---|---|
ws.charts.add_bar(top_row, left_col, bottom_row, right_col) | Gegroepeerde kolom (staafdiagram) |
ws.charts.add_line(top_row, left_col, bottom_row, right_col) | Lijn |
ws.charts.add_pie(top_row, left_col, bottom_row, right_col) | Taart |
ws.charts.add_area(top_row, left_col, bottom_row, right_col) | Vlak |
Alle vier positionele parameters beschrijven het rechthoekige gebied in het blad waar de grafiek zal worden ingebed. Rij- en kolomindices zijn nulgebaseerd. Elke methode retourneert een Chart object dat je verder configureert voordat je opslaat.
Beperking: Alleen de grafiektype LINE, BAR, PIE, AREA en STOCK kunnen worden opgeslagen als XLSX. Aanroepen wb.save() met een werkmap die een ander grafiektype bevat (bijv. SCATTER, WATERFALL, RADAR, TREEMAP, HISTOGRAM) zal een fout veroorzaken NotImplementedError.
Een kolomgrafiek toevoegen
Het onderstaande voorbeeld schrijft een kleine omzet-per-product dataset en voegt vervolgens een kolomgrafiek toe die onder de gegevens wordt geplaatst.
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")De gegevens beslaan rijen 1–6 (nulgebaseerde rijen 0–5), dus top_row=6 plaatst de grafiek direct hieronder zonder de gegevens te overlappen.
Een lijngrafiek toevoegen
Lijngrafieken zijn geschikt om trends in de tijd weer te geven. De aanroephandtekening is identiek aan add_bar — alleen de methodenaam verandert.
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")Grafiektitel en legenda
Stel de titel van de grafiek in door een eenvoudige tekenreeks direct toe te wijzen aan chart.title. De eigenschap accepteert een str — probeer geen sub‑eigenschap zoals .title.text, die niet bestaat in deze bibliotheek.
##Correct
chart.title = "Quarterly Sales"
##Wrong — raises AttributeError
##chart.title.text = "Quarterly Sales"De zichtbaarheid en positie van de legenda worden geregeld door twee eigenschappen:
chart.show_legend = True # display the legend
chart.legend_position = "bottom" # "bottom", "top", "left", "right"Om de legenda volledig te verbergen, stel in chart.show_legend = False. De legend_position waarde wordt genegeerd wanneer de legenda verborgen is.
Configuratie van gegevensreeksen
Gebruik chart.n_series.add() om gegevensbereiken aan een grafiek toe te voegen. Geef alle argumenten op als keyword‑argumenten om verwarring over de positievolgorde te voorkomen:
chart.n_series.add("B2:B6", category_data="A2:A6", name="Revenue")Je kunt meerdere series aan één grafiek toevoegen door n_series.add meer meer dan één keer. Elke oproep voegt een nieuwe serie toe:
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")Categorische gegevens
Categorielabels kunnen op chart‑niveau of op het niveau van de individuele serie worden ingesteld.
Grafiekniveau categoriegegevens geldt als standaard voor alle series:
chart.category_data = "A2:A5"Categoriegegevens op serieniveau (via het category_data keyword-argument voor n_series.add) overschrijft de grafiekniveau-instelling voor die specifieke serie:
chart.n_series.add("B2:B5", category_data="A2:A5", name="Revenue")Wanneer elke serie hetzelfde categoriebereik deelt, is het instellen van chart.category_data eenmalig is beknopter. Wanneer series verschillende categoriebereiken hebben — bijvoorbeeld, twee datasets met verschillende tijdsperioden — gebruik het per-serie keyword-argument in plaats daarvan.
Grafiekpositionering
De vier positionele parameters voor elke add_* methode definiëren een begrenzende rechthoek in het blad, gemeten in nulgebaseerde rij- en kolomindexen:
add_bar(top_row, left_col, bottom_row, right_col)| Parameter | Betekenis |
|---|---|
top_row | Nulgebaseerde index van de eerste rij die door de grafiek wordt ingenomen |
left_col | Nulgebaseerde index van de meest linkse kolom |
bottom_row | Nulgebaseerde index van de laatste rij die door de grafiek wordt bezet |
right_col | Nulgebaseerde index van de meest rechtse kolom |
Een veelvoorkomend patroon is om de grafiek direct onder de gegevens te plaatsen. Als uw gegevens eindigt op Excel-rij 6 (nulgebaseerde rij-index 5), start de grafiek op 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")Zorg ervoor dat de grafiek hoog genoeg is om leesbaar te zijn: een hoogte van minimaal 15 rijen (bottom_row - top_row >= 15) en een breedte van minimaal 6 kolommen is een redelijk uitgangspunt.
Veelvoorkomende fouten
| Fout | Juist | Waarom |
|---|---|---|
ws.charts.add(ChartType.COLUMN, ...) | ws.charts.add_bar(...) | Roep niet aan ws.charts.add(ChartType.X, ...) direct voor niet-ondersteunde types — het zal een fout opwerpen NotImplementedError voor 11 van de 16 grafiektypen. Gebruik add_bar(), add_line(), add_pie(), add_area(), of add_stock() in plaats daarvan. |
chart.title.text = "My Chart" | chart.title = "My Chart" | chart.title is een eenvoudige tekenreeks‑eigenschap, geen object met een .text sub‑eigenschap. |
chart.n_series.add("B2:B5", "A2:A5", "Revenue") | chart.n_series.add("B2:B5", category_data="A2:A5", name="Revenue") | De tweede en derde parameters moeten als sleutelwoord‑argumenten worden doorgegeven om ambiguïteit te voorkomen. |
chart = ws.charts.add_bar(0, 0, 15, 7) (overlap data) | Plaats top_row onder de laatste datarij | Een grafiek die data overlapt, verdoezelt waarden en veroorzaakt verwarrende lay‑outs. |
chart.legend_position = "bottom" zonder chart.show_legend = True | Set chart.show_legend = True eerste | legend_position heeft geen effect wanneer show_legend is False. |
Zie ook
- API-referentie: Volledige klasse- en methodedocumentatie voor
aspose.cells_foss - Kennisbank: Taakgerichte handleidingen
- Productoverzicht: Samenvatting van functies en mogelijkheden
- Aan de slag / Installatie: pip install en configuratie
- Blog: Python Excel-diagramhandleiding: Stapsgewijze gids voor het maken van diagrammen