Práca s grafmi
Prehľad
Aspose.Cells FOSS uses a method-per-chart-type API. Instead of a generic add(ChartType.X, ...) volaní, každý typ grafu má svoju vlastnú vyhradenú metódu na listu charts kolekcii:
| Metóda | Typ grafu |
|---|---|
ws.charts.add_bar(top_row, left_col, bottom_row, right_col) | Zoskupený stĺpec (stĺpcový graf) |
ws.charts.add_line(top_row, left_col, bottom_row, right_col) | Čiara |
ws.charts.add_pie(top_row, left_col, bottom_row, right_col) | Koláčový |
ws.charts.add_area(top_row, left_col, bottom_row, right_col) | Oblasť |
Všetky štyri pozičné parametre popisujú obdĺžnikovú oblasť v hárku, kde graf bude vložený. Indexy riadkov a stĺpcov sú číslovanie od nuly. Každý metóda vracia Chart objekt, ktorý ďalej nakonfigurujete pred uložením.
Obmedzenie: Iba typy grafov LINE, BAR, PIE, AREA a STOCK je možné uložiť do XLSX. Volanie wb.save() s pracovnou knihou, ktorá obsahuje akýkoľvek iný typ grafu (napr. SCATTER, WATERFALL, RADAR, TREEMAP, HISTOGRAM) vyvolá NotImplementedError.
Pridanie stĺpcového grafu
Nižšie uvedený príklad zapíše malý dataset tržieb podľa produktu a potom pridá stĺpcový graf umiestnený pod dátami.
from aspose.cells_foss import Workbook, Cell
workbook = Workbook()
ws = workbook.worksheets[0]
##--- Data ---
ws.cells["A1"].value = "Product"
ws.cells["B1"].value = "Revenue"
products = ["Widget A", "Widget B", "Widget C", "Widget D", "Widget E"]
revenues = [12_500, 18_200, 9_800, 21_400, 15_600]
for i, (product, revenue) in enumerate(zip(products, revenues), start=2):
ws.cells[f"A{i}"].value = product
ws.cells[f"B{i}"].value = revenue
##--- Chart (rows 7–22, columns A–H, all zero-based) ---
##top_row=6, left_col=0, bottom_row=22, right_col=7
chart = ws.charts.add_bar(6, 0, 22, 7)
chart.title = "Revenue by Product"
chart.n_series.add("B2:B6", category_data="A2:A6", name="Revenue (USD)")
chart.show_legend = True
chart.legend_position = "bottom"
workbook.save("column_chart.xlsx")
print("Saved column_chart.xlsx")Údaje zaberajú riadky 1–6 (riadky s nulovým indexom 0–5), takže top_row=6 umiestňuje the graf okamžite pod ním bez prekrytia údajov.
Pridanie čiarového grafu
Čiarové grafy dobre zobrazujú trendy v čase. Signatúra volania je identická s add_bar — iba názov metódy sa mení.
from aspose.cells_foss import Workbook, Cell
workbook = Workbook()
ws = workbook.worksheets[0]
##--- Monthly trend data ---
ws.cells["A1"].value = "Month"
ws.cells["B1"].value = "Page Views"
ws.cells["C1"].value = "Conversions"
months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun"]
page_views = [4_200, 5_100, 4_800, 6_300, 7_100, 6_800]
conversions = [ 210, 255, 230, 340, 390, 360]
for i, (month, pv, cv) in enumerate(zip(months, page_views, conversions), start=2):
ws.cells[f"A{i}"].value = month
ws.cells[f"B{i}"].value = pv
ws.cells[f"C{i}"].value = cv
##--- Line chart below the data ---
chart = ws.charts.add_line(8, 0, 24, 8)
chart.title = "Monthly Website Metrics"
chart.n_series.add("B2:B7", category_data="A2:A7", name="Page Views")
chart.n_series.add("C2:C7", category_data="A2:A7", name="Conversions")
chart.show_legend = True
chart.legend_position = "bottom"
workbook.save("line_chart.xlsx")
print("Saved line_chart.xlsx")Názov grafu a legenda
Nastavte názov grafu priradením obyčajného reťazca priamo k chart.title. Tá vlastnosť akceptuje str — nepokúšajte sa pristupovať k podvlastnosti ako .title.text, ktorá v tejto knižnici neexistuje.
##Correct
chart.title = "Quarterly Sales"
##Wrong — raises AttributeError
##chart.title.text = "Quarterly Sales"Viditeľnosť a pozícia legendy sú riadené dvoma vlastnosťami:
chart.show_legend = True # display the legend
chart.legend_position = "bottom" # "bottom", "top", "left", "right"Ak chcete legendu úplne skryť, nastavte chart.show_legend = False. Tá legend_position hodnota sa ignoruje, keď je legenda skrytá.
Konfigurácia dátových sérií
Použite chart.n_series.add() na pripojenie dátových rozsahov k grafu. Odovzdajte všetky argumenty ako kľúčové argumenty aby sa predišlo zmätku s poradím pozícií:
chart.n_series.add("B2:B6", category_data="A2:A6", name="Revenue")Viacero sérií môžete pridať do jedného grafu volaním n_series.add viac viackrát. Každé volanie pridá novú sériu:
from aspose.cells_foss import Workbook, Cell
workbook = Workbook()
ws = workbook.worksheets[0]
##Headers
ws.cells["A1"].value = "Quarter"
ws.cells["B1"].value = "North"
ws.cells["C1"].value = "South"
ws.cells["D1"].value = "East"
data = [
("Q1", 8_400, 6_100, 7_200),
("Q2", 9_200, 7_400, 8_100),
("Q3", 10_500, 8_900, 9_600),
("Q4", 11_800, 9_300, 10_200),
]
for i, row in enumerate(data, start=2):
ws.cells[f"A{i}"].value = row[0]
ws.cells[f"B{i}"].value = row[1]
ws.cells[f"C{i}"].value = row[2]
ws.cells[f"D{i}"].value = row[3]
chart = ws.charts.add_bar(6, 0, 22, 8)
chart.title = "Regional Sales by Quarter"
chart.n_series.add("B2:B5", category_data="A2:A5", name="North")
chart.n_series.add("C2:C5", category_data="A2:A5", name="South")
chart.n_series.add("D2:D5", category_data="A2:A5", name="East")
chart.show_legend = True
chart.legend_position = "bottom"
workbook.save("multi_series_chart.xlsx")
print("Saved multi_series_chart.xlsx")Kategóriové dáta
Popisky kategórií je možné nastaviť na úrovni grafu alebo na úrovni jednotlivých sérií.
Kategóriové údaje na úrovni grafu používa sa pre všetky série ako predvolené:
chart.category_data = "A2:A5"Kategóriové údaje na úrovni série (prostredníctvom category_data kľúčového argumentu pre n_series.add) prepíše nastavenie na úrovni grafu pre konkrétnu sériu:
chart.n_series.add("B2:B5", category_data="A2:A5", name="Revenue")Keď všetky série zdieľajú rovnaký rozsah kategórií, nastavenie chart.category_data raz je stručnejšie. Keď majú série rôzne rozsahy kategórií — napríklad, dva dátové sady s rôznymi časovými obdobiami — použite kľúčový argument pre každú sériu namiesto toho.
Umiestnenie grafu
Štyri pozičné parametre pre každú add_* metódu definujú ohraničujúci obdĺžnik v hárku, meraný v nulovo založených indexoch riadkov a stĺpcov:
add_bar(top_row, left_col, bottom_row, right_col)| Parameter | Význam |
|---|---|
top_row | Nulovo založený index prvého riadku obsadeného grafom |
left_col | Index začínajúci od nuly najľavejšieho stĺpca |
bottom_row | Index začínajúci od nuly posledného riadku obsadeného grafom |
right_col | Index začínajúci od nuly najpravejšieho stĺpca |
Bežný vzor je umiestniť graf priamo pod dáta. Ak vaše dáta končí na riadku 6 v Exceli (index riadku od nuly 5), začnite graf na top_row=6:
from aspose.cells_foss import Workbook, Cell
workbook = Workbook()
ws = workbook.worksheets[0]
##Data in rows 1–5 (zero-based 0–4)
labels = ["Alpha", "Beta", "Gamma", "Delta", "Epsilon"]
values = [30, 45, 28, 60, 52]
ws.cells["A1"].value = "Category"
ws.cells["B1"].value = "Score"
for i, (label, val) in enumerate(zip(labels, values), start=2):
ws.cells[f"A{i}"].value = label
ws.cells[f"B{i}"].value = val
##Data ends at zero-based row 5 (Excel row 6).
##Place chart from row 6 to row 22, columns A–H (0–7).
chart = ws.charts.add_bar(6, 0, 22, 7)
chart.title = "Category Scores"
chart.n_series.add("B2:B6", category_data="A2:A6", name="Score")
chart.show_legend = False
workbook.save("positioned_chart.xlsx")
print("Saved positioned_chart.xlsx")Urobte graf dostatočne vysoký, aby bol čitateľný: výška aspoň 15 riadkov (bottom_row - top_row >= 15) a šírka aspoň 6 stĺpcov je rozumný východiskový bod.
Bežné chyby
| Nesprávne | Správne | Prečo |
|---|---|---|
ws.charts.add(ChartType.COLUMN, ...) | ws.charts.add_bar(...) | Nevyvolávajte ws.charts.add(ChartType.X, ...) priamo pre nepodporované typy — vyvolá NotImplementedError pre 11 z 16 typov grafov. Použite add_bar(), add_line(), add_pie(), add_area(), alebo add_stock() namiesto toho. |
chart.title.text = "My Chart" | chart.title = "My Chart" | chart.title je obyčajná reťazcová vlastnosť, nie objekt s .text podvlastnosťou. |
chart.n_series.add("B2:B5", "A2:A5", "Revenue") | chart.n_series.add("B2:B5", category_data="A2:A5", name="Revenue") | Druhý a tretí parameter musia byť odovzdané ako kľúčové argumenty, aby sa predišlo nejednoznačnosti. |
chart = ws.charts.add_bar(0, 0, 15, 7) (prekryje dáta) | Umiestniť top_row pod posledný riadok s dátami | Graf, ktorý prekryje dáta, zakryje hodnoty a spôsobí neprehľadné rozloženie. |
chart.legend_position = "bottom" bez chart.show_legend = True | Nastaviť chart.show_legend = True prvý | legend_position nemá žiadny účinok, keď show_legend je False. |
Pozri tiež
- Referenčná dokumentácia API: Kompletná dokumentácia tried a metód pre
aspose.cells_foss - Znalostná báza: Sprievodcovia orientované na úlohy
- Prehľad produktu: Zhrnutie funkcií a možností
- Začíname / Inštalácia: pip inštalácia a nastavenie
- Blog: Python Návod na graf v Exceli: Postupný návod na vytváranie grafov