Lucrul cu grafice

Prezentare generală

Aspose.Cells FOSS uses a method-per-chart-type API. Instead of a generic add(ChartType.X, ...) apel, fiecare tip de diagramă are propria metodă dedicată pe a foii de lucru charts colecție:

MetodăTip diagramă
ws.charts.add_bar(top_row, left_col, bottom_row, right_col)Coloană grupată (diagramă cu bare)
ws.charts.add_line(top_row, left_col, bottom_row, right_col)Linie
ws.charts.add_pie(top_row, left_col, bottom_row, right_col)Plăcintă
ws.charts.add_area(top_row, left_col, bottom_row, right_col)Suprafață

Toți cei patru parametri poziționali descriu zona rectangulară din foaie în care diagrama va fi încorporată. Indicii de rând și coloană sunt indexat de la zero. Fiecare metoda returnează un Chart obiect pe care îl configurezi în continuare înainte de a salva.

Limitare: Doar tipurile de diagramă LINE, BAR, PIE, AREA și STOCK pot fi salvate în XLSX. Apelarea wb.save() cu un registru de lucru care conține orice alt tip de diagramă (de ex., SCATTER, WATERFALL, RADAR, TREEMAP, HISTOGRAM) va genera NotImplementedError.


Adăugarea unei diagrame de tip coloană

Exemplul de mai jos scrie un set de date mic de venituri pe produs și apoi adaugă o diagramă de tip coloană poziționată sub date.

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

Datele ocupă rândurile 1–6 (rânduri indexate de la zero 0–5), deci top_row=6 plasează diagrama imediat dedesubt fără a suprapune datele.


Adăugarea unei diagrame de tip linie

Diagramele de tip linie funcționează bine pentru a arăta tendințele în timp. Semnătura apelului este identic cu add_bar — doar numele metodei se schimbă.

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

Titlul diagramei și legenda

Setați titlul graficului prin atribuirea unui șir simplu direct la chart.title. Proprietatea proprietate acceptă un str — nu încercați să accesați o sub-proprietate cum ar fi .title.text, care nu există în această bibliotecă.

##Correct
chart.title = "Quarterly Sales"

##Wrong — raises AttributeError
##chart.title.text = "Quarterly Sales"

Vizibilitatea și poziția legendei sunt controlate de două proprietăți:

chart.show_legend = True          # display the legend
chart.legend_position = "bottom"  # "bottom", "top", "left", "right"

Pentru a ascunde complet legenda, setați chart.show_legend = False. Proprietatea legend_position valoarea este ignorată când legenda este ascunsă.


Configurarea seriilor de date

Utilizați chart.n_series.add() pentru a atașa intervale de date la un grafic. Transmite toate argumentele ca argumente cu cuvinte cheie pentru a evita confuzia legată de ordinea pozițională:

chart.n_series.add("B2:B6", category_data="A2:A6", name="Revenue")

Poți adăuga mai multe serii la un singur grafic apelând n_series.add mai multe de mai multe ori. Fiecare apel adaugă o nouă serie:

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

Date de categorie

Etichetele de categorie pot fi setate la nivelul graficului sau la nivelul fiecărei serii individuale.

Date de categorie la nivel de grafic se aplică tuturor seriilor ca implicit:

chart.category_data = "A2:A5"

Date de categorie la nivel de serie (prin the category_data argument de cuvânt cheie pentru n_series.add) suprascrie setarea la nivel de diagramă pentru acea serie specifică:

chart.n_series.add("B2:B5", category_data="A2:A5", name="Revenue")

Când fiecare serie partajează același interval de categorii, setarea chart.category_data o dată este mai concisă. Când seriile au intervale de categorii diferite — de exemplu, două seturi de date cu perioade de timp diferite — folosiți argumentul de cuvânt cheie per-serie în schimb.


Poziționarea graficului

Cele patru parametri poziționali pentru fiecare add_* metodă definește o limită dreptunghi în foaie, măsurat în indici de rând și coloană începând de la zero:

add_bar(top_row, left_col, bottom_row, right_col)
ParametruSemnificație
top_rowIndex bazat pe zero al primului rând ocupat de diagramă
left_colIndex bazat pe zero al coloanei celei mai din stânga
bottom_rowIndex bazat pe zero al ultimului rând ocupat de diagramă
right_colIndex bazat pe zero al coloanei celei mai din dreapta

Un model comun este să plasezi diagrama direct sub date. Dacă datele tale se termină la rândul 6 din Excel (index de rând bazat pe zero 5), începe diagrama la 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")

Fă graficul suficient de înalt pentru a fi lizibil: o înălțime de cel puțin 15 rânduri (bottom_row - top_row >= 15) și o lățime de cel puțin 6 coloane reprezintă un punct de plecare rezonabil.


Greșeli comune

GreșitCorectDe ce
ws.charts.add(ChartType.COLUMN, ...)ws.charts.add_bar(...)Nu apela ws.charts.add(ChartType.X, ...) direct pentru tipuri nesuportate — va arunca NotImplementedError pentru 11 din 16 tipuri de grafice. Utilizaţi add_bar(), add_line(), add_pie(), add_area(), sau add_stock() în schimb.
chart.title.text = "My Chart"chart.title = "My Chart"chart.title este o proprietate de tip șir simplu, nu un obiect cu un .text sub-proprietate.
chart.n_series.add("B2:B5", "A2:A5", "Revenue")chart.n_series.add("B2:B5", category_data="A2:A5", name="Revenue")Al doilea și al treilea parametru trebuie transmise ca argumente denumite pentru a evita ambiguitatea.
chart = ws.charts.add_bar(0, 0, 15, 7) (suprapune datele)Plasaţi top_row sub ultima linie de dateUn grafic care suprapune datele ascunde valorile și cauzează aranjamente confuze.
chart.legend_position = "bottom" fără chart.show_legend = TrueSetare chart.show_legend = True primullegend_position nu are efect când show_legend este False.

Vezi și

 Română