Werken met grafieken
Overzicht
Aspose.Cells FOSS gebruikt een methode-per-diagramtype‑API. In plaats van een generieke add(ChartType.X, ...)‑aanroep, heeft elk diagramtype zijn eigen toegewijde methode in de charts‑collectie van het werkblad:
| 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 wordt ingebed. Rij‑ en kolomindexen zijn nulgebaseerd. Elke methode retourneert een Chart‑object dat u verder configureert voordat u opslaat.
Beperking: Alleen LINE, BAR, PIE, AREA en STOCK grafiektype‑s kunnen worden opgeslagen naar XLSX. Het aanroepen van
wb.save()met een werkmap die een ander grafiektype bevat (bijv. SCATTER, WATERFALL, RADAR, TREEMAP, HISTOGRAM) zalNotImplementedErrorveroorzaken.
Een kolomdiagram toevoegen
Het onderstaande voorbeeld schrijft een kleine omzet‑per‑product dataset en voegt vervolgens een kolomgrafiek toe die onder de gegevens is 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 eronder zonder de gegevens te overlappen.
Een lijndiagram toevoegen
Lijndiagrammen werken goed 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 grafiektitel in door een gewone tekenreeks direct toe te wijzen aan chart.title. De eigenschap accepteert een str — probeer geen sub‑eigenschap zoals .title.text te benaderen, 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 gecontroleerd 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 chart.show_legend = False in. De legend_position-waarde wordt genegeerd wanneer de legenda verborgen is.
Gegevensreeksconfiguratie
Gebruik chart.n_series.add() om gegevensbereiken aan een diagram te koppelen. Geef alle argumenten op als keyword arguments om verwarring door positievolgorde te voorkomen:
chart.n_series.add("B2:B6", category_data="A2:A6", name="Revenue")U kunt meerdere series aan één grafiek toevoegen door n_series.add meer dan eens aan te roepen. 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")Categoriegegevens
Categorielabels kunnen worden ingesteld op het diagramniveau of op het niveau van de individuele serie.
Grafiekniveau-categoriegegevens geldt als standaard voor alle series:
chart.category_data = "A2:A5"Series-niveau categoriedata (via het category_data sleutelwoordargument naar n_series.add) overschrijft de diagram‑niveau instelling voor die specifieke serie:
chart.n_series.add("B2:B5", category_data="A2:A5", name="Revenue")Wanneer elke serie hetzelfde categoriebereik deelt, het instellen van chart.category_data
eenmalig beknopter. Wanneer series verschillende categoriebereiken hebben — bijvoorbeeld,
twee datasets met verschillende tijdsperioden — gebruik het per-series sleutelwoordargument
in plaats daarvan.
Grafiekpositionering
De vier positionele parameters van 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 ingenomen |
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
eindigen op Excel‑rij 6 (nulgebaseerde rij‑index 5), start de grafiek bij 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")Maak de grafiek hoog genoeg 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
startpunt.
Veelvoorkomende fouten
| Fout | Juist | Waarom |
|---|---|---|
ws.charts.add(ChartType.COLUMN, ...) | ws.charts.add_bar(...) | Roep ws.charts.add(ChartType.X, ...) niet direct aan voor niet‑ondersteunde types — het zal NotImplementedError veroorzaken voor 11 van de 16 grafiektypen. Gebruik in plaats daarvan add_bar(), add_line(), add_pie(), add_area() of add_stock(). |
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) (overlaps data) | Plaats top_row onder de laatste datarij | Een grafiek die data overlapt, verbergt waarden en veroorzaakt verwarrende lay‑outs. |
chart.legend_position = "bottom" zonder chart.show_legend = True | Stel chart.show_legend = True eerst in | legend_position heeft geen effect wanneer show_legend False is. |
Zie ook
- API Reference: Volledige klasse- en methodedocumentatie voor
aspose.cells_foss - Knowledge Base: Taakgerichte handleidingen
- Product Overview: Samenvatting van functies en mogelijkheden
- Getting Started / Installation: pip‑installatie en configuratie
- Blog: Python Excel Chart Tutorial: Stapsgewijze gids voor het maken van grafieken