Hur man skapar diagram i Excel med Python

Hur man skapar diagram i Excel med Python

Diagram omvandlar råa kalkylbladsdata till visuella insikter. Aspose.Cells FOSS for Python låter dig skapa kolumn-, linje-, stapel- och cirkeldiagram programatiskt, med full kontroll över dataserier, kategorietiketter, diagramtitel och position, utan att kräva Microsoft Excel.

Varför skapa diagram med Aspose.Cells FOSS?

  1. Ingen Excel behövs: Skapa diagram helt i Python, på vilket operativsystem som helst.
  2. Metod-per-typ API: Använd add_bar(), add_line(), add_pie(), add_area() och fler — en metod per diagramtyp.
  3. Namngivna serier: Konfigurera varje serie med nyckelordsargumenten name=, category_data=.
  4. Preciserad placering: Styr diagrammets gränser med cellkoordinater (top_row, left_col, bottom_row, right_col).

Steg-för-steg-guide

Steg 1: Installera Aspose.Cells FOSS för Python

pip install aspose-cells-foss

Steg 2: Skapa en arbetsbok och fyll i data

Skapa en ny arbetsbok och skriv numeriska data samt kategorimärkningar till celler:

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

Steg 3: Lägg till ett stapeldiagram

Använd ws.charts.add_bar(top_row, left_col, bottom_row, right_col) för att infoga ett stapeldiagram. Metoden returnerar ett diagramobjekt direkt:

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

Rad- och kolumnindex är nollbaserade.


Steg 4: Konfigurera dataserier

Lägg till varje dataserie med chart.n_series.add() med nyckelordsargument:

##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")

Argumentet category_data specificerar cellintervallet för x‑axelns etiketter. Argumentet name anger serielegendens etikett.


Steg 5: Ange diagramrubriken och kategoridata

Ange diagramrubriken som en vanlig sträng:

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"

Steg 6: Spara arbetsboken

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

Komplett kolumndiagramexempel:

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")

Steg 7: Skapa ett linjediagram

Samma mönster fungerar för 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")

Vanliga problem och lösningar

1. Diagrammet visas tomt eller är tomt

Cause: Dataområdet som skickas till n_series.add() innehåller inga värden, eller så är cellområdessträngen felaktig.
Fix: Verifiera att cellområdet matchar dina data. Kontrollera att ws.cells["B2"].value inte är None.

2. Kategorietiketter visas inte på x-axeln

Orsak: chart.category_data var inte inställd, eller så pekar området på tomma celler.
Lösning: Ställ in chart.category_data = "A2:A5" där kolumn A innehåller dina etikettsträngar.

3. Diagramposition överlappar data

Orsak: Radgränserna i add_bar() överlappar med dataområdet.
Åtgärd: Placera diagrammet under data: ws.charts.add_bar(data_last_row + 2, 0, data_last_row + 18, 7).

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

Orsak: FOSS‑biblioteket använder metod‑per‑typ‑API, inte add(ChartType.COLUMN, ...).
Lösning: Använd ws.charts.add_bar(...), ws.charts.add_line(...), ws.charts.add_pie(...) eller ws.charts.add_area(...).


Vanliga frågor

Vilka diagramtyper stöds?

Använd add_bar(), add_line(), add_pie(), add_area() och add_stock() för de vanligaste typerna. Dessa fem har full XML‑serialiseringsstöd. Kontrollera ChartCollection‑klassen för den fullständiga listan över tillgängliga add_*‑metoder.

Kan jag skapa diagram i en befintlig Excel-fil?

Ja. Läs in arbetsboken med Workbook("existing.xlsx"), öppna målbladet och lägg till ett diagram med den lämpliga ws.charts.add_*() metoden.

Hur sätter jag diagramrubriken?

Tilldela en enkel sträng: chart.title = "My Chart Title". Det finns ingen .text underegenskap: titeln är själva strängen.

Är detta tillvägagångssätt kompatibelt med pandas?

Ja. Skriv pandas DataFrame‑värden till celler i en loop, sedan lägg till ett diagram över det dataintervallet.


Relaterade resurser:

 Svenska