Hoe grafieken te maken in Excel met Python

Hoe grafieken te maken in Excel met Python

Grafieken zetten ruwe spreadsheetgegevens om in visuele inzichten. Aspose.Cells FOSS for Python stelt je in staat om kolom-, lijn-, staaf- en taartdiagrammen programmatisch te maken, met volledige controle over gegevensreeksen, categorielabels, grafiektitel en positie, zonder Microsoft Excel te vereisen.

Waarom grafieken maken met Aspose.Cells FOSS?

  1. Geen Excel nodig: Maak grafieken volledig in Python, op elk besturingssysteem.
  2. Method-per-type API: Gebruik add_bar(), add_line(), add_pie(), add_area() en meer — één methode per grafiektype.
  3. Benoemde series: Configureer elke serie met name=, category_data= sleutelwoordargumenten.
  4. Precieze plaatsing: Beheer de grenzen van de grafiek met celcoördinaten (top_row, left_col, bottom_row, right_col).

Stapsgewijze gids

Stap 1: Installeer Aspose.Cells FOSS voor Python

pip install aspose-cells-foss

Stap 2: Maak een werkmap en vul gegevens in

Maak een nieuw werkboek en schrijf numerieke gegevens plus categorielabels naar cellen:

from aspose.cells_foss import Workbook, Cell

workbook = Workbook()
ws = workbook.worksheets[0]
ws.name = "Sales Data"

##Category labels in column A (rows 2-5, leaving row 1 for a header)
ws.cells["A1"].value = "Quarter"
ws.cells["A2"].value = "Q1"
ws.cells["A3"].value = "Q2"
ws.cells["A4"].value = "Q3"
ws.cells["A5"].value = "Q4"

##Revenue series in column B
ws.cells["B1"].value = "Revenue"
ws.cells["B2"].value = 50000
ws.cells["B3"].value = 62000
ws.cells["B4"].value = 71000
ws.cells["B5"].value = 89000

##Expense series in column C
ws.cells["C1"].value = "Expenses"
ws.cells["C2"].value = 32000
ws.cells["C3"].value = 38000
ws.cells["C4"].value = 41000
ws.cells["C5"].value = 47000

Stap 3: Voeg een kolomgrafiek toe

Gebruik ws.charts.add_bar(top_row, left_col, bottom_row, right_col) om een kolomgrafiek in te voegen. De methode retourneert direct een chart‑object:

##Insert a column chart occupying rows 7-22, columns 0-7
chart = ws.charts.add_bar(6, 0, 22, 7)

Rij- en kolomindexen zijn nulgebaseerd.


Stap 4: Gegevensreeks configureren

Voeg elke gegevensreeks toe met chart.n_series.add() met sleutelwoordargumenten:

##Add Revenue series
chart.n_series.add("B2:B5", category_data="A2:A5", name="Revenue")

##Add Expenses series
chart.n_series.add("C2:C5", category_data="A2:A5", name="Expenses")

Het category_data argument specificeert het celbereik voor de x-aslabels. Het name argument stelt het legenda‑label van de reeks in.


Stap 5: Stel de grafiektitel en categoriedata in

Stel de grafiektitel in als een gewone tekenreeks:

chart.title = "Quarterly Sales vs Expenses"
chart.category_data = "A2:A5"   # x-axis labels at chart level
chart.show_legend = True
chart.legend_position = "bottom"

Stap 6: Sla de Werkmap op

workbook.save("sales_chart.xlsx")
print("Workbook with chart saved.")

Voorbeeld van een volledige kolomgrafiek:

from aspose.cells_foss import Workbook, Cell

workbook = Workbook()
ws = workbook.worksheets[0]

##Data
labels = ["Q1", "Q2", "Q3", "Q4"]
revenue = [50000, 62000, 71000, 89000]
expenses = [32000, 38000, 41000, 47000]

ws.cells["A1"].value = "Quarter"
ws.cells["B1"].value = "Revenue"
ws.cells["C1"].value = "Expenses"

for i, (label, rev, exp) in enumerate(zip(labels, revenue, expenses), start=2):
    ws.cells[f"A{i}"].value = label
    ws.cells[f"B{i}"].value = rev
    ws.cells[f"C{i}"].value = exp

chart = ws.charts.add_bar(6, 0, 22, 7)
chart.title = "Quarterly Sales vs Expenses"
chart.category_data = "A2:A5"
chart.n_series.add("B2:B5", category_data="A2:A5", name="Revenue")
chart.n_series.add("C2:C5", category_data="A2:A5", name="Expenses")
chart.show_legend = True
chart.legend_position = "bottom"

workbook.save("quarterly_chart.xlsx")

Stap 7: Maak een lijndiagram

Hetzelfde patroon werkt voor add_line():

from aspose.cells_foss import Workbook, Cell

workbook = Workbook()
ws = workbook.worksheets[0]

months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun"]
revenue = [42000, 47500, 53000, 49000, 61000, 68000]

ws.cells["A1"].value = "Month"
ws.cells["B1"].value = "Revenue"

for i, (m, r) in enumerate(zip(months, revenue), start=2):
    ws.cells[f"A{i}"].value = m
    ws.cells[f"B{i}"].value = r

chart = ws.charts.add_line(8, 0, 24, 8)
chart.title = "Monthly Revenue Trend"
chart.category_data = "A2:A7"
chart.n_series.add("B2:B7", category_data="A2:A7", name="Revenue")
chart.show_legend = True

workbook.save("trend_chart.xlsx")

Veelvoorkomende problemen en oplossingen

1. Grafiek verschijnt leeg of blanco

Cause: Het gegevensbereik dat aan n_series.add() is doorgegeven, bevat geen waarden, of de celbereik‑tekenreeks is onjuist.
Fix: Controleer of het celbereik overeenkomt met uw gegevens. Controleer of ws.cells["B2"].value niet None is.

2. Categorie‑labels worden niet weergegeven op de x-as

Oorzaak: chart.category_data is niet ingesteld, of het bereik wijst naar lege cellen.
Oplossing: Stel chart.category_data = "A2:A5" in waar kolom A uw labelteksten bevat.

3. Grafiekpositie overlapt gegevens

Cause: De rijgrenzen in add_bar() overlappen met het gegevensgebied.
Fix: Plaats de grafiek onder de gegevens: ws.charts.add_bar(data_last_row + 2, 0, data_last_row + 18, 7).

4. AttributeError: 'ChartCollection' object has no attribute 'add'

Oorzaak: De FOSS-bibliotheek gebruikt een method-per-type API, niet add(ChartType.COLUMN, ...).
Oplossing: Gebruik ws.charts.add_bar(...), ws.charts.add_line(...), ws.charts.add_pie(...), of ws.charts.add_area(...).


Veelgestelde vragen

Welke grafiektype(s) worden ondersteund?

Gebruik add_bar(), add_line(), add_pie(), add_area() en add_stock() voor de meest voorkomende typen. Deze vijf hebben volledige XML‑serialisatieondersteuning. Controleer de ChartCollection‑klasse voor de volledige lijst met beschikbare add_*‑methoden.

Kan ik grafieken maken in een bestaand Excel‑bestand?

Ja. Laad de werkmap met Workbook("existing.xlsx"), open het doelblad en voeg een grafiek toe met de juiste ws.charts.add_*()-methode.

Hoe stel ik de grafiektitel in?

Wijs een platte tekenreeks toe: chart.title = "My Chart Title". Er is geen .text sub‑eigenschap: de titel is de tekenreeks zelf.

Is deze aanpak compatibel met pandas?

Ja. Schrijf pandas DataFrame-waarden naar cellen in een lus, en voeg vervolgens een diagram toe over dat gegevensbereik.


Gerelateerde bronnen:

 Nederlands