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ști | Cum să o faci |
|---|---|
| Adaugă un grafic cu coloane | ws.charts.add_bar(top_row, left_col, bottom_row, right_col) |
| Adaugă un grafic liniar | ws.charts.add_line(top_row, left_col, bottom_row, right_col) |
| Adaugă un grafic cu bare | ws.charts.add_bar(top_row, left_col, bottom_row, right_col) |
| Adaugă un grafic circular | ws.charts.add_pie(top_row, left_col, bottom_row, right_col) |
| Setează titlul | chart.title = "My Chart" (șir simplu; nu .title.text) |
| Setaţi categoriile axei X | chart.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 legenda | chart.show_legend = True |
| Setaţi poziţia legendei | chart.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șit | Dreapta |
|---|---|
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 ChartType | Nu este necesar; folosește ws.charts.add_bar() direct |
chart.n_series.category_data = "A2:A5" | chart.category_data = "A2:A5" (nivel diagramă) |
Resurse
- Aspose.Cells FOSS for Python: Installation
- Ghid pentru dezvoltatori: Crearea diagramelor
- Referință API: ChartCollection, Chart, NSeries
- Bază de cunoștințe: Cum să creați diagrame în Python
- Prezentare generală a produsului: Rezumat al funcțiilor și capabilităților
- Blog: Introducere Aspose.Cells FOSS: Prezentare generală a bibliotecii și pornire rapidă
- Depozit GitHub