Treballant amb gràfics
Visió general
Aspose.Cells FOSS uses a method-per-chart-type API. Instead of a generic add(ChartType.X, ...) crida, cada tipus de gràfic té el seu propi mètode dedicat a del full de treball charts col·lecció:
| 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 |
Els quatre paràmetres posicionals descriuen l’àrea rectangular al full on s’incrustarà el gràfic. Els índexs de fila i columna són basat en zero. Cada el mètode retorna un Chart objecte 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 conté 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 sota 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 són útils per mostrar tendències al llarg del temps. La signatura de la crida és identic 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. El propietat accepta una str — no intentis accedir a una subpropietat com ara .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 amb dues propietats:
chart.show_legend = True # display the legend
chart.legend_position = "bottom" # "bottom", "top", "left", "right"Per amagar completament la llegenda, estableix chart.show_legend = False. El legend_position el valor s’ignora quan la llegenda està amagada.
Configuració de les sèries de dades
Utilitza chart.n_series.add() per adjuntar intervals de dades a un gràfic. Passa tots 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")Pots 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 a nivell de gràfic o a nivell de cada sèrie individual.
Dades de categoria a nivell de gràfic s’aplica a totes les sèries per defecte:
chart.category_data = "A2:A5"Dades de categoria a nivell de sèrie (via el category_data argument de paraula clau 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, establir chart.category_data una sola 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 a cada sèrie en canvi.
Posicionament del gràfic
Els quatre paràmetres posicionals de cada add_* mètode defineix un límit rectangle al full, mesurat en índexs de fila i columna basats en zero:
add_bar(top_row, left_col, bottom_row, right_col)| Paràmetre | Significat |
|---|---|
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")Fes que el gràfic sigui 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
| Incorrecte | Correcte | Per què |
|---|---|---|
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. Utilitzeu add_bar(), add_line(), add_pie(), add_area(), o add_stock() en canvi. |
chart.title.text = "My Chart" | chart.title = "My Chart" | chart.title és una propietat de cadena simple, no un objecte amb una .text subpropietat. |
chart.n_series.add("B2:B5", "A2:A5", "Revenue") | chart.n_series.add("B2:B5", category_data="A2:A5", name="Revenue") | Els segons i tercers paràmetres han de ser passats com a arguments de paraula clau per evitar ambigüitat. |
chart = ws.charts.add_bar(0, 0, 15, 7) (superposa dades) | Col·loca top_row sota l’última fila de dades | Un gràfic que superposa dades oculta valors i provoca disposicions confuses. |
chart.legend_position = "bottom" sense chart.show_legend = True | Conjunt chart.show_legend = True primer | legend_position no té cap efecte quan show_legend és False. |
Vegeu també
- Referència de l’API: Documentació completa de classes i mètodes per a
aspose.cells_foss - Base de coneixement: Guies pràctiques orientades a tasques
- Visió general del producte: Resum de característiques i capacitats
- Començar / Instal·lació: pip install i configuració
- Blog: Python Tutorial de gràfics d’Excel: Guia pas a pas per a la creació de gràfics