Cum să creați grafice în Excel cu Python

Cum să creați grafice în Excel cu Python

Graficele transformă datele brute din foile de calcul în informații vizuale. Aspose.Cells FOSS for Python vă permite să creaţi grafice de tip coloană, linie, bară şi plăcintă programatic, cu control complet asupra seriilor de date, etichetelor de categorie, titlului graficului şi poziţiei, fără a necesita Microsoft Excel.

De ce să creaţi grafice cu Aspose.Cells FOSS?

  1. Fără Excel necesar: Construiți grafice complet în Python, pe orice sistem de operare.
  2. API metodă-per-tip: Utilizați add_bar(), add_line(), add_pie(), add_area() și altele — o metodă pentru fiecare tip de diagramă.
  3. Serii denumite: Configurați fiecare serie cu argumentele cheie name=, category_data=.
  4. Plasare precisă: Controlați limitele graficului prin coordonatele celulelor (top_row, left_col, bottom_row, right_col).

Ghid pas cu pas

Pasul 1: Instalați Aspose.Cells FOSS pentru Python

pip install aspose-cells-foss

Pasul 2: Creați un registru de lucru și completați datele

Creează un nou registru de lucru și scrie date numerice plus etichete de categorie în celule:

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

Pasul 3: Adaugă un grafic cu coloane

Utilizați ws.charts.add_bar(top_row, left_col, bottom_row, right_col) pentru a insera un grafic cu coloane. Metoda returnează direct un obiect de tip grafic:

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

Indicele rândului și al coloanei sunt numerotate de la zero.


Pasul 4: Configurarea seriei de date

Adăugați fiecare serie de date utilizând chart.n_series.add() cu argumente cheie:

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

Argumentul category_data specifică intervalul de celule pentru etichetele axei x. Argumentul name stabilește eticheta legendei seriei.


Pasul 5: Setează titlul graficului și datele de categorie

Setaţi titlul graficului ca un şir simplu:

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"

Pasul 6: Salvați registrul de lucru

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

Exemplu complet de diagramă coloane:

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

Pasul 7: Creare diagramă liniară

Același model funcționează pentru 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")

Probleme comune și soluții

1. Graficul apare gol sau vid

Cause: Intervalul de date transmis către n_series.add() nu conține valori sau șirul de interval de celule este incorect.
Fix: Verificați că intervalul de celule corespunde datelor dvs. Verificați că ws.cells["B2"].value nu este None.

2. Etichetele de categorie nu apar pe axa x

Cauză: chart.category_data nu a fost setat(ă), sau intervalul indică celule goale.
Remediere: Setează chart.category_data = "A2:A5" unde coloana A conține șirurile de etichetă.

3. Poziția pe diagramă suprapune datele

Cauză: Limitele rândului în add_bar() se suprapun cu zona de date.
Remediere: Plasați graficul sub date: ws.charts.add_bar(data_last_row + 2, 0, data_last_row + 18, 7).

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

Cauză: Biblioteca FOSS folosește API-ul metodă-per-tip, nu add(ChartType.COLUMN, ...).
Remediere: Folosiți ws.charts.add_bar(...), ws.charts.add_line(...), ws.charts.add_pie(...) sau ws.charts.add_area(...).


Întrebări frecvente

Ce tipuri de diagrame sunt acceptate?

Utilizați add_bar(), add_line(), add_pie(), add_area() și add_stock() pentru cele mai comune tipuri. Aceste cinci au suport complet de serializare XML. Verificați clasa ChartCollection pentru lista completă a metodelor disponibile add_*.

Pot crea grafice într-un fișier Excel existent?

Da. Încarcă registrul de lucru cu Workbook("existing.xlsx"), accesează foaia țintă și adaugă un grafic utilizând metoda corespunzătoare ws.charts.add_*().

Cum pot seta titlul graficului?

Alocați un șir simplu: chart.title = "My Chart Title". Nu există nicio sub‑proprietate .text: titlul este șirul în sine.

Este această abordare compatibilă cu pandas?

Da. Scrie valorile DataFrame pandas în celule într-o buclă, apoi adaugă un grafic peste acel interval de date.


Resurse conexe:

 Română