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ètodeTipus 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àmetreSignificat
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

IncorrecteCorrectePer 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 dadesUn gràfic que superposa dades oculta valors i provoca disposicions confuses.
chart.legend_position = "bottom" sense chart.show_legend = TrueConjunt chart.show_legend = True primerlegend_position no té cap efecte quan show_legend és False.

Vegeu també

 Català