Treballant amb gràfics
Visió general
Aspose.Cells FOSS utilitza una API de mètode per tipus de gràfic. En lloc d’una crida genèrica add(ChartType.X, ...), cada tipus de gràfic té el seu propi mètode dedicat a la col·lecció charts del full de càlcul:
| Mètode | Tipus de gràfic |
|---|---|
ws.charts.add_bar(top_row, left_col, bottom_row, right_col) | Columna agrupada (gràfic de barres) |
ws.charts.add_line(top_row, left_col, bottom_row, right_col) | Línia |
ws.charts.add_pie(top_row, left_col, bottom_row, right_col) | Pastís |
ws.charts.add_area(top_row, left_col, bottom_row, right_col) | Àrea |
Tots quatre paràmetres posicionals descriuen l’àrea rectangular al full on s’incrustarà el gràfic. Els índexs de fila i columna són zero-based. Cada mètode retorna un objecte Chart que configureu més endavant abans de desar.
Limitació: Només els tipus de gràfic LINE, BAR, PIE, AREA i STOCK es poden desar a XLSX. Cridar
wb.save()amb un llibre de treball que contingui qualsevol altre tipus de gràfic (p. ex., SCATTER, WATERFALL, RADAR, TREEMAP, HISTOGRAM) generaràNotImplementedError.
Afegint un gràfic de columnes
L’exemple següent escriu un petit conjunt de dades d’ingressos per producte i després afegeix un gràfic de columnes situat a sota de les dades.
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")Les dades ocupen les files 1–6 (files basades en zero 0–5), de manera que top_row=6 col·loca el gràfic immediatament a sota sense superposar les dades.
Afegint un gràfic de línies
Els gràfics de línies funcionen bé per mostrar tendències al llarg del temps. La signatura de la crida és
idèntica a add_bar — només canvia el nom del mètode.
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")Títol del gràfic i llegenda
Estableix el títol del gràfic assignant una cadena simple directament a chart.title. La propietat accepta un str — no intentis accedir a una subpropietat com .title.text, que no existeix en aquesta biblioteca.
##Correct
chart.title = "Quarterly Sales"
##Wrong — raises AttributeError
##chart.title.text = "Quarterly Sales"La visibilitat i la posició de la llegenda es controlen mitjançant dues propietats:
chart.show_legend = True # display the legend
chart.legend_position = "bottom" # "bottom", "top", "left", "right"Per amagar completament la llegenda, establiu chart.show_legend = False. El valor legend_position s’ignora quan la llegenda està amagada.
Configuració de la sèrie de dades
Utilitzeu chart.n_series.add() per adjuntar intervals de dades a un gràfic. Passeu tots els arguments com a arguments de paraula clau per evitar confusions d’ordre posicional:
chart.n_series.add("B2:B6", category_data="A2:A6", name="Revenue")Podeu afegir diverses sèries a un únic gràfic cridant n_series.add més
d’una vegada. Cada crida afegeix una nova sèrie:
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")Dades de categoria
Les etiquetes de categoria es poden establir al nivell del gràfic o al nivell de la sèrie individual.
Dades de categoria a nivell de gràfic s’apliquen a totes les sèries per defecte:
chart.category_data = "A2:A5"Dades de categoria a nivell de sèrie (mitjançant l’argument de paraula clau category_data a
n_series.add) sobrescriu la configuració a nivell de gràfic per a aquesta sèrie específica:
chart.n_series.add("B2:B5", category_data="A2:A5", name="Revenue")Quan totes les sèries comparteixen el mateix interval de categories, establint chart.category_data
una vegada és més concís. Quan les sèries tenen intervals de categories diferents — per exemple,
dos conjunts de dades amb períodes de temps diferents — utilitzeu l’argument de paraula clau per sèrie
en canvi.
Posicionament del gràfic
Els quatre paràmetres posicionals de cada mètode add_* defineixen un rectangle delimitador al full, mesurat en índexs de fila i columna que comencen a zero:
add_bar(top_row, left_col, bottom_row, right_col)| Parameter | Meaning |
|---|---|
top_row | Índex basat en zero de la primera fila ocupada pel gràfic |
left_col | Índex basat en zero de la columna més a l’esquerra |
bottom_row | Índex basat en zero de l’última fila ocupada pel gràfic |
right_col | Índex basat en zero de la columna més a la dreta |
Un patró comú és col·locar el gràfic directament sota les dades. Si les teves dades
acaben a la fila 6 d’Excel (índex de fila basat en zero 5), comença el gràfic a 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")Feu el gràfic prou alt per ser llegible: una alçada d’almenys 15 files
(bottom_row - top_row >= 15) i una amplada d’almenys 6 columnes és un punt de partida raonable.
Errors comuns
| Wrong | Right | Why |
|---|---|---|
ws.charts.add(ChartType.COLUMN, ...) | ws.charts.add_bar(...) | No crideu ws.charts.add(ChartType.X, ...) directament per a tipus no compatibles — generarà NotImplementedError per a 11 de 16 tipus de gràfic. Useu add_bar(), add_line(), add_pie(), add_area() o add_stock() en el seu lloc. |
chart.title.text = "My Chart" | chart.title = "My Chart" | chart.title és una propietat de cadena simple, no un objecte amb una subpropietat .text. |
chart.n_series.add("B2:B5", "A2:A5", "Revenue") | chart.n_series.add("B2:B5", category_data="A2:A5", name="Revenue") | Els segon i tercer paràmetres han de passar‑se com a arguments de paraula clau per evitar ambigüitat. |
chart = ws.charts.add_bar(0, 0, 15, 7) (se superposa a les dades) | Col·loqueu top_row sota l’última fila de dades | Un gràfic que se superposa a les dades amaga els valors i provoca disposicions confuses. |
chart.legend_position = "bottom" sense chart.show_legend = True | Establiu chart.show_legend = True primer | legend_position no té cap efecte quan show_legend és False. |
Vegeu també
- API Reference: Documentació completa de classes i mètodes per a
aspose.cells_foss - Knowledge Base: Guies pràctiques orientades a tasques
- Product Overview: Resum de característiques i capacitats
- Getting Started / Installation: Instal·lació i configuració amb pip
- Blog: Python Excel Chart Tutorial: Guia pas a pas per a la creació de gràfics