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:

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 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)
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 bezet
right_colNulgebaseerde 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

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

Zie ook

 Nederlands