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:

MethodeGrafiektype
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) zal NotImplementedError veroorzaken.


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)
ParameterBetekenis
top_rowNulgebaseerde index van de eerste rij die door de grafiek wordt ingenomen
left_colNulgebaseerde index van de meest linkse kolom
bottom_rowNulgebaseerde index van de laatste rij die door de grafiek wordt ingenomen
right_colNulgebaseerde 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

FoutJuistWaarom
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 grafiektype­n. 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 datarijEen grafiek die data overlapt, verbergt waarden en veroorzaakt verwarrende lay‑outs.
chart.legend_position = "bottom" zonder chart.show_legend = TrueStel chart.show_legend = True eerst inlegend_position heeft geen effect wanneer show_legend False is.

Zie ook

 Nederlands