De ce să construiești grafice programatic?

Fluxurile automate de raportare au adesea nevoie de grafice încorporate în registrele Excel, cum ar fi rezumate trimestriale, tablouri de bord cu rezultate ML sau metrici operaționale. Realizarea acestora fără Microsoft Excel înseamnă fără costuri de licențiere și fără interacțiune GUI.

Aspose.Cells FOSS for Python furnizează un API de grafice curat, Pythonic: o metodă pentru fiecare tip de grafic, un șir simplu pentru titlu și configurarea seriei bazată pe argumente cu cuvinte cheie. Întregul API este prezentat mai jos.


Instalare

pip install aspose-cells-foss

Importă clasele de care ai nevoie:

from aspose.cells_foss import Workbook, Cell

Graficele sunt accesate prin ws.charts; nu este necesară importarea unui modul de grafice separat.


API-ul de grafice pe scurt

Ce doreștiCum să o faci
Adaugă un grafic cu coloanews.charts.add_bar(top_row, left_col, bottom_row, right_col)
Adaugă un grafic liniarws.charts.add_line(top_row, left_col, bottom_row, right_col)
Adaugă un grafic cu barews.charts.add_bar(top_row, left_col, bottom_row, right_col)
Adaugă un grafic circularws.charts.add_pie(top_row, left_col, bottom_row, right_col)
Setează titlulchart.title = "My Chart" (șir simplu; nu .title.text)
Setaţi categoriile axei Xchart.category_data = "A2:A6"
Adăugaţi o serie numităchart.n_series.add("B2:B6", category_data="A2:A6", name="Revenue")
Afişaţi legendachart.show_legend = True
Setaţi poziţia legendeichart.legend_position = "bottom"

Toate indicii de rând și coloană sunt bazate pe zero. add_* Metodele returnează Chart obiectul direct (nu un index).


Grafic de coloană: Pas cu pas

Să construim un grafic de coloană care arată veniturile și cheltuielile trimestriale.

Pasul 1: Creează registrul și scrie datele

from aspose.cells_foss import Workbook, Cell

wb = Workbook()
ws = wb.worksheets[0]
ws.name = "Q1-Q4 Report"

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

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

for i, (q, r, e) in enumerate(zip(quarters, revenue, expenses), start=2):
    ws.cells[f"A{i}"].value = q
    ws.cells[f"B{i}"].value = r
    ws.cells[f"C{i}"].value = e

Pasul 2: Adaugă graficul

Poziționează graficul sub date (rândul 7 în sus, acoperind coloanele 0-8):

chart = ws.charts.add_bar(6, 0, 22, 8)

Pasul 3: Configurează titlul și legenda

chart.title = "Quarterly Revenue vs Expenses"
chart.show_legend = True
chart.legend_position = "bottom"

Pasul 4: Adăugați seria de date

Fiecare serie are nevoie de un interval de valori, un interval de categorii și un nume:

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

Pasul 5: Salvați

wb.save("quarterly_report.xlsx")
print("Chart saved to quarterly_report.xlsx")

Exemplu complet într-un singur bloc:

from aspose.cells_foss import Workbook, Cell

wb = Workbook()
ws = wb.worksheets[0]
ws.name = "Q1-Q4 Report"

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

data = [("Q1", 50000, 32000), ("Q2", 62000, 38000),
        ("Q3", 71000, 41000), ("Q4", 89000, 47000)]
for i, (q, r, e) in enumerate(data, start=2):
    ws.cells[f"A{i}"].value = q
    ws.cells[f"B{i}"].value = r
    ws.cells[f"C{i}"].value = e

chart = ws.charts.add_bar(6, 0, 22, 8)
chart.title = "Quarterly Revenue 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"

wb.save("quarterly_report.xlsx")

Diagramă liniară: Tendință lunară

Același model funcționează pentru add_line():

from aspose.cells_foss import Workbook, Cell

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

months  = ["Jan", "Feb", "Mar", "Apr", "May", "Jun"]
actuals = [42000, 47500, 53000, 49000, 61000, 68000]
targets = [45000, 45000, 50000, 55000, 60000, 65000]

ws.cells["A1"].value = "Month"
ws.cells["B1"].value = "Actual"
ws.cells["C1"].value = "Target"

for i, (m, a, t) in enumerate(zip(months, actuals, targets), start=2):
    ws.cells[f"A{i}"].value = m
    ws.cells[f"B{i}"].value = a
    ws.cells[f"C{i}"].value = t

chart = ws.charts.add_line(8, 0, 24, 8)
chart.title = "Monthly Revenue: Actual vs Target"
chart.category_data = "A2:A7"
chart.n_series.add("B2:B7", category_data="A2:A7", name="Actual")
chart.n_series.add("C2:C7", category_data="A2:A7", name="Target")
chart.show_legend = True
chart.legend_position = "right"

wb.save("monthly_trend.xlsx")

Diagramă circulară: Cota de piață

from aspose.cells_foss import Workbook, Cell

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

segments = ["Product A", "Product B", "Product C", "Product D"]
shares   = [40, 25, 20, 15]

ws.cells["A1"].value = "Segment"
ws.cells["B1"].value = "Share %"
for i, (s, v) in enumerate(zip(segments, shares), start=2):
    ws.cells[f"A{i}"].value = s
    ws.cells[f"B{i}"].value = v

chart = ws.charts.add_pie(6, 0, 20, 7)
chart.title = "Market Share by Product"
chart.category_data = "A2:A5"
chart.n_series.add("B2:B5", category_data="A2:A5", name="Share")
chart.show_legend = True
chart.legend_position = "right"

wb.save("market_share.xlsx")

Greșeli comune de evitat

GreșitDreapta
ws.charts.add(ChartType.COLUMN, 5, 0, 15, 5)ws.charts.add_bar(5, 0, 15, 5)
chart.title.text = "Revenue"chart.title = "Revenue"
chart.n_series.add("B2:B5", True) (pozițional)chart.n_series.add("B2:B5", category_data="A2:A5", name="Revenue")
from aspose.cells.charts import ChartTypeNu este necesar; folosește ws.charts.add_bar() direct
chart.n_series.category_data = "A2:A5"chart.category_data = "A2:A5" (nivel diagramă)

Resurse