Proč vytvářet grafy programově?

Automatizované reportingové pipeline často potřebují grafy vložené do sešitů Excel, například čtvrtletní souhrny, dashboardy výsledků strojového učení nebo provozní metriky. Provádět to bez Microsoft Excelu znamená nulové licenční náklady a žádnou interakci s GUI.

Aspose.Cells FOSS for Python poskytuje čisté, Pythonické API pro grafy: jedna metoda pro každý typ grafu, prostý řetězec pro název a konfiguraci řad založenou na klíčových argumentech. Celé API je popsáno níže.


Instalace

pip install aspose-cells-foss

Importujte třídy, které potřebujete:

from aspose.cells_foss import Workbook, Cell

Grafy jsou přístupné přes ws.charts; není nutné importovat samostatný modul grafu.


API grafů na první pohled

Co chceteJak to udělat
Přidat sloupcový grafws.charts.add_bar(top_row, left_col, bottom_row, right_col)
Přidat čárový grafws.charts.add_line(top_row, left_col, bottom_row, right_col)
Přidat pruhový grafws.charts.add_bar(top_row, left_col, bottom_row, right_col)
Přidat koláčový grafws.charts.add_pie(top_row, left_col, bottom_row, right_col)
Nastavit názevchart.title = "My Chart" (prostý řetězec; ne .title.text)
Nastavit kategorie osy xchart.category_data = "A2:A6"
Přidat pojmenovanou řaduchart.n_series.add("B2:B6", category_data="A2:A6", name="Revenue")
Zobrazit legenduchart.show_legend = True
Nastavit pozici legendychart.legend_position = "bottom"

Všechny indexy řádků a sloupců jsou číslování od nuly. add_* metody vracejí Chart objekt přímo (ne index).


Sloupcový graf: krok za krokem

Vytvořme sloupcový graf zobrazující čtvrtletní příjmy a výdaje.

Krok 1: Vytvořte sešit a zapište data

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: Přidejte graf

Umístěte graf pod data (od řádku 7 dál, přes sloupce 0‑8):

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

Krok 3: Nastavte název a legendu

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

Krok 4: Přidat datové řady

Každá řada potřebuje rozsah hodnot, rozsah kategorií a název:

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žit

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

Úplný pří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")

Čárový graf: Měsíční trend

Stejný vzor funguje pro 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: Tržní podíl

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

Běžné chyby, kterým se vyhnout

ŠpatněSprávně
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) (pozicní)chart.n_series.add("B2:B5", category_data="A2:A5", name="Revenue")
from aspose.cells.charts import ChartTypeNení potřeba; použijte ws.charts.add_bar() přímo
chart.n_series.category_data = "A2:A5"chart.category_data = "A2:A5" (úroveň grafu)

Zdroje