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:
| Metodo | Tipo 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)| Parametro | Significato |
|---|---|
top_row | Indice a base zero della prima riga occupata dal grafico |
left_col | Indice a base zero della colonna più a sinistra |
bottom_row | Indice a base zero dell’ultima riga occupata dal grafico |
right_col | Indice 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
| Sbagliato | Corretto | Perché |
|---|---|---|
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 dati | Un grafico che sovrappone i dati nasconde i valori e genera layout confusi. |
chart.legend_position = "bottom" senza chart.show_legend = True | Imposta chart.show_legend = True primo | legend_position non ha alcun effetto quando show_legend è False. |
Vedi anche
- Riferimento API: Documentazione completa di classi e metodi per
aspose.cells_foss - Base di conoscenza: Guide pratiche orientate ai compiti
- Panoramica del prodotto: Riepilogo di funzionalità e capacità
- Guida introduttiva / Installazione: pip install e configurazione
- Blog: Python Tutorial sul grafico Excel: Guida passo-passo per la creazione di grafici