Prečo vytvárať grafy programovo?

Automatizované reportovacie pipeline často vyžadujú grafy vložené do Excelových zošitov, napríklad štvrťročné súhrny, dashboardy výsledkov strojového učenia alebo operačné metriky. Vykonať to bez Microsoft Excelu znamená žiadne licenčné náklady a žiadnu interakciu s GUI.

Aspose.Cells FOSS for Python poskytuje čisté, Pythonické API pre grafy: jedna metóda pre každý typ grafu, obyčajný reťazec pre názov a konfiguráciu sérií založenú na kľúčových argumentoch. Celé API je popísané nižšie.


Inštalácia

pip install aspose-cells-foss

Importujte triedy, ktoré potrebujete:

from aspose.cells_foss import Workbook, Cell

Grafy sa pristupuje cez ws.charts; nie je potrebné importovať samostatný modul pre grafy.


API pre grafy na prvý pohľad

Čo chceteAko to urobiť
Pridať stĺpcový grafws.charts.add_bar(top_row, left_col, bottom_row, right_col)
Pridať čiarový grafws.charts.add_line(top_row, left_col, bottom_row, right_col)
Pridať pruhový grafws.charts.add_bar(top_row, left_col, bottom_row, right_col)
Pridať koláčový grafws.charts.add_pie(top_row, left_col, bottom_row, right_col)
Nastaviť názovchart.title = "My Chart" (obyčajný reťazec; nie .title.text)
Nastaviť kategórie osi xchart.category_data = "A2:A6"
Pridať pomenovanú sériuchart.n_series.add("B2:B6", category_data="A2:A6", name="Revenue")
Zobraziť legenduchart.show_legend = True
Nastaviť pozíciu legendychart.legend_position = "bottom"

Všetky indexy riadkov a stĺpcov sú nulovo založený. add_* metódy vracajú Chart objekt priamo (nie index).


Stĺpcový graf: krok za krokom

Vytvorme stĺpcový graf zobrazujúci štvrťročné príjmy a výdavky.

Krok 1: Vytvorte zošit a zapíšte dáta

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

Krok 2: Pridajte graf

Umiestnite graf pod dáta (od riadku 7 ďalej, pokrývajúci stĺpce 0‑8):

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

Krok 3: Nastavte názov a legendu

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

Krok 4: Pridať dátové série

Každá séria potrebuje rozsah hodnôt, rozsah kategórií a názov:

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

Krok 5: Uložiť

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

Úplný príklad v jednom bloku:

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

Čiarový graf: Mesačný trend

Rovnaký vzor funguje pre 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")

Koláčový graf: Trhový podiel

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

Bežné chyby, ktorým sa treba vyhnúť

NesprávneSprávne
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) (pozicionálny)chart.n_series.add("B2:B5", category_data="A2:A5", name="Revenue")
from aspose.cells.charts import ChartTypeNie je potrebné; použite ws.charts.add_bar() priamo
chart.n_series.category_data = "A2:A5"chart.category_data = "A2:A5" (úroveň grafu)

Zdroje