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)| Parametru | Semnificație |
|---|---|
top_row | Index bazat pe zero al primului rând ocupat de diagramă |
left_col | Index bazat pe zero al coloanei celei mai din stânga |
bottom_row | Index bazat pe zero al ultimului rând ocupat de diagramă |
right_col | Index 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șit | Corect | De 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 date | Un grafic care suprapune datele ascunde valorile și cauzează aranjamente confuze. |
chart.legend_position = "bottom" fără chart.show_legend = True | Setare chart.show_legend = True primul | legend_position nu are efect când show_legend este False. |
Vezi și
- Referință API: Documentație completă a claselor și metodelor pentru
aspose.cells_foss - Bază de cunoștințe: Ghiduri practice orientate pe sarcini
- Prezentare generală a produsului: Rezumat al funcționalităților și capabilităților
- Începeți / Instalare: pip install și configurare
- Blog: Python Tutorial pentru grafice Excel: Ghid pas cu pas pentru crearea diagramelor