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?
- Geen Excel nodig: Maak grafieken volledig in Python, op elk besturingssysteem.
- Method-per-type API: Gebruik
add_bar(),add_line(),add_pie(),add_area()en meer — één methode per grafiektype. - Benoemde series: Configureer elke serie met
name=,category_data=sleutelwoordargumenten. - 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-fossStap 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 = 47000Stap 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: