Lavorare con i grafici

Panoramica

Aspose.Cells FOSS uses a method-per-chart-type API. Instead of a generic add(ChartType.X, ...) chiamata, ogni tipo di grafico ha il proprio metodo dedicato su del foglio di lavoro charts collezione:

MetodoTipo di grafico
ws.charts.add_bar(top_row, left_col, bottom_row, right_col)Colonna raggruppata (grafico a barre)
ws.charts.add_line(top_row, left_col, bottom_row, right_col)Linea
ws.charts.add_pie(top_row, left_col, bottom_row, right_col)Torta
ws.charts.add_area(top_row, left_col, bottom_row, right_col)Area

Tutti e quattro i parametri posizionali descrivono l’area rettangolare nel foglio dove il grafico verrà incorporato. Gli indici di riga e colonna sono basati su zero. Ogni metodo restituisce un Chart oggetto che configuri ulteriormente prima di salvare.

Limitazione: Solo i tipi di grafico LINE, BAR, PIE, AREA e STOCK possono essere salvati in XLSX. Chiamando wb.save() con una cartella di lavoro che contiene qualsiasi altro tipo di grafico (ad es., SCATTER, WATERFALL, RADAR, TREEMAP, HISTOGRAM) genererà NotImplementedError.


Aggiungere un grafico a colonne

L’esempio seguente scrive un piccolo set di dati di fatturato per prodotto e poi aggiunge un grafico a colonne posizionato sotto i dati.

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

I dati occupano le righe 1–6 (righe basate su zero 0–5), quindi top_row=6 posiziona il grafico immediatamente sotto senza sovrapporre i dati.


Aggiungere un grafico a linee

I grafici a linee sono ideali per mostrare le tendenze nel tempo. La firma della chiamata è identica a add_bar — solo il nome del metodo cambia.

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

Titolo del grafico e legenda

Imposta il titolo del grafico assegnando una stringa semplice direttamente a chart.title. La proprietà accetta un str — non tentare di accedere a una sotto-proprietà come .title.text, che non esiste in questa libreria.

##Correct
chart.title = "Quarterly Sales"

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

La visibilità e la posizione della legenda sono controllate da due proprietà:

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

Per nascondere completamente la legenda, imposta chart.show_legend = False. La legend_position valore viene ignorato quando la legenda è nascosta.


Configurazione delle serie di dati

Usa chart.n_series.add() per collegare intervalli di dati a un grafico. Passa tutti i argomenti come argomenti keyword per evitare confusione sull’ordine posizionale:

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

Puoi aggiungere più serie a un singolo grafico chiamando n_series.add più più di una volta. Ogni chiamata aggiunge una nuova 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")

Dati di categoria

Le etichette delle categorie possono essere impostate a livello di grafico o a livello della singola serie.

Dati di categoria a livello di grafico si applica a tutte le serie come impostazione predefinita:

chart.category_data = "A2:A5"

Dati di categoria a livello di serie (tramite il category_data argomento keyword a n_series.add) sovrascrive l’impostazione a livello di grafico per quella serie specifica:

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

Quando tutte le serie condividono lo stesso intervallo di categoria, impostare chart.category_data una sola volta è più conciso. Quando le serie hanno intervalli di categoria diversi — per esempio, due set di dati con periodi temporali differenti — usa l’argomento keyword per serie altrimenti.


Posizionamento del grafico

I quattro parametri posizionali di ogni add_* metodo definiscono un rettangolo di delimitazione nel foglio, misurato in indici di riga e colonna a base zero:

add_bar(top_row, left_col, bottom_row, right_col)
ParametroSignificato
top_rowIndice a base zero della prima riga occupata dal grafico
left_colIndice a base zero della colonna più a sinistra
bottom_rowIndice a base zero dell’ultima riga occupata dal grafico
right_colIndice a base zero della colonna più a destra

Un modello comune è posizionare il grafico direttamente sotto i dati. Se i tuoi dati termina alla riga 6 di Excel (indice di riga basato su zero 5), inizia il grafico 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")

Rendi il grafico sufficientemente alto per essere leggibile: un’altezza di almeno 15 righe (bottom_row - top_row >= 15) e una larghezza di almeno 6 colonne è un punto di partenza ragionevole.


Errori comuni

SbagliatoCorrettoPerché
ws.charts.add(ChartType.COLUMN, ...)ws.charts.add_bar(...)Non chiamare ws.charts.add(ChartType.X, ...) direttamente per tipi non supportati — genererà NotImplementedError per 11 su 16 tipi di grafico. Usa add_bar(), add_line(), add_pie(), add_area(), oppure add_stock() invece.
chart.title.text = "My Chart"chart.title = "My Chart"chart.title è una proprietà di tipo stringa semplice, non un oggetto con un .text sotto-proprietà.
chart.n_series.add("B2:B5", "A2:A5", "Revenue")chart.n_series.add("B2:B5", category_data="A2:A5", name="Revenue")Il secondo e il terzo parametro devono essere passati come argomenti nominati per evitare ambiguità.
chart = ws.charts.add_bar(0, 0, 15, 7) (sovrappone i dati)Posiziona top_row sotto l’ultima riga di datiUn grafico che sovrappone i dati nasconde i valori e genera layout confusi.
chart.legend_position = "bottom" senza chart.show_legend = TrueImposta chart.show_legend = True primolegend_position non ha alcun effetto quando show_legend è False.

Vedi anche

 Italiano