Come creare grafici in Excel con Python

Come creare grafici in Excel con Python

I grafici trasformano i dati grezzi del foglio di calcolo in intuizioni visive. Aspose.Cells FOSS for Python consente di creare grafici a colonne, a linee, a barre e a torta in modo programmatico, con pieno controllo sulle serie di dati, le etichette di categoria, il titolo del grafico e la posizione, senza richiedere Microsoft Excel.

Perché creare grafici con Aspose.Cells FOSS?

  1. Nessun Excel richiesto: Crea grafici interamente in Python, su qualsiasi OS.
  2. API metodo-per-tipo: Usa add_bar(), add_line(), add_pie(), add_area(), e altro — un metodo per tipo di grafico.
  3. Serie nominate: Configura ogni serie con gli argomenti chiave name=, category_data=.
  4. Posizionamento preciso: Controlla i limiti del grafico tramite le coordinate delle celle (top_row, left_col, bottom_row, right_col).

Guida passo passo

Passo 1: Installa Aspose.Cells FOSS per Python

pip install aspose-cells-foss

Passo 2: Crea un Workbook e Popola i Dati

Crea un nuovo workbook e scrivi dati numerici più etichette di categoria nelle celle:

from aspose.cells_foss import Workbook, Cell

workbook = Workbook()
ws = workbook.worksheets[0]
ws.name = "Sales Data"

##Category labels in column A (rows 2-5, leaving row 1 for a header)
ws.cells["A1"].value = "Quarter"
ws.cells["A2"].value = "Q1"
ws.cells["A3"].value = "Q2"
ws.cells["A4"].value = "Q3"
ws.cells["A5"].value = "Q4"

##Revenue series in column B
ws.cells["B1"].value = "Revenue"
ws.cells["B2"].value = 50000
ws.cells["B3"].value = 62000
ws.cells["B4"].value = 71000
ws.cells["B5"].value = 89000

##Expense series in column C
ws.cells["C1"].value = "Expenses"
ws.cells["C2"].value = 32000
ws.cells["C3"].value = 38000
ws.cells["C4"].value = 41000
ws.cells["C5"].value = 47000

Passo 3: Aggiungi un grafico a colonne

Usa ws.charts.add_bar(top_row, left_col, bottom_row, right_col) per inserire un grafico a colonne. Il metodo restituisce direttamente un oggetto grafico:

##Insert a column chart occupying rows 7-22, columns 0-7
chart = ws.charts.add_bar(6, 0, 22, 7)

Gli indici di riga e colonna partono da zero.


Passo 4: Configura serie di dati

Aggiungi ogni serie di dati usando chart.n_series.add() con argomenti keyword:

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

##Add Expenses series
chart.n_series.add("C2:C5", category_data="A2:A5", name="Expenses")

L’argomento category_data specifica l’intervallo di celle per le etichette dell’asse x. L’argomento name imposta l’etichetta della legenda della serie.


Passo 5: Imposta il titolo del grafico e i dati di categoria

Imposta il titolo del grafico come stringa semplice:

chart.title = "Quarterly Sales vs Expenses"
chart.category_data = "A2:A5"   # x-axis labels at chart level
chart.show_legend = True
chart.legend_position = "bottom"

Passo 6: Salva la cartella di lavoro

workbook.save("sales_chart.xlsx")
print("Workbook with chart saved.")

Esempio completo di grafico a colonne:

from aspose.cells_foss import Workbook, Cell

workbook = Workbook()
ws = workbook.worksheets[0]

##Data
labels = ["Q1", "Q2", "Q3", "Q4"]
revenue = [50000, 62000, 71000, 89000]
expenses = [32000, 38000, 41000, 47000]

ws.cells["A1"].value = "Quarter"
ws.cells["B1"].value = "Revenue"
ws.cells["C1"].value = "Expenses"

for i, (label, rev, exp) in enumerate(zip(labels, revenue, expenses), start=2):
    ws.cells[f"A{i}"].value = label
    ws.cells[f"B{i}"].value = rev
    ws.cells[f"C{i}"].value = exp

chart = ws.charts.add_bar(6, 0, 22, 7)
chart.title = "Quarterly Sales vs Expenses"
chart.category_data = "A2:A5"
chart.n_series.add("B2:B5", category_data="A2:A5", name="Revenue")
chart.n_series.add("C2:C5", category_data="A2:A5", name="Expenses")
chart.show_legend = True
chart.legend_position = "bottom"

workbook.save("quarterly_chart.xlsx")

Passo 7: Crea un grafico a linee

Lo stesso schema funziona per add_line():

from aspose.cells_foss import Workbook, Cell

workbook = Workbook()
ws = workbook.worksheets[0]

months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun"]
revenue = [42000, 47500, 53000, 49000, 61000, 68000]

ws.cells["A1"].value = "Month"
ws.cells["B1"].value = "Revenue"

for i, (m, r) in enumerate(zip(months, revenue), start=2):
    ws.cells[f"A{i}"].value = m
    ws.cells[f"B{i}"].value = r

chart = ws.charts.add_line(8, 0, 24, 8)
chart.title = "Monthly Revenue Trend"
chart.category_data = "A2:A7"
chart.n_series.add("B2:B7", category_data="A2:A7", name="Revenue")
chart.show_legend = True

workbook.save("trend_chart.xlsx")

Problemi comuni e soluzioni

1. Il grafico appare vuoto o privo di dati

Causa: L’intervallo di dati passato a n_series.add() non contiene valori, oppure la stringa dell’intervallo di celle è errata.
Correzione: Verifica che l’intervallo di celle corrisponda ai tuoi dati. Controlla che ws.cells["B2"].value non sia None.

2. Le etichette delle categorie non vengono visualizzate sull’asse x

Cause: chart.category_data non è stato impostato, oppure l’intervallo punta a celle vuote.
Fix: Imposta chart.category_data = "A2:A5" dove la colonna A contiene le tue stringhe di etichetta.

3. La posizione del grafico si sovrappone ai dati

Causa: I limiti di riga in add_bar() si sovrappongono all’area dati.
Correzione: Posizionare il grafico sotto i dati: ws.charts.add_bar(data_last_row + 2, 0, data_last_row + 18, 7).

4. AttributeError: 'ChartCollection' object has no attribute 'add'

Cause: La libreria FOSS utilizza un’API metodo-per-tipo, non add(ChartType.COLUMN, ...).
Fix: Usa ws.charts.add_bar(...), ws.charts.add_line(...), ws.charts.add_pie(...), o ws.charts.add_area(...).


Domande Frequenti

Quali tipi di grafico sono supportati?

Usa add_bar(), add_line(), add_pie(), add_area() e add_stock() per i tipi più comuni. Questi cinque hanno il supporto completo alla serializzazione XML. Controlla la classe ChartCollection per l’elenco completo dei metodi add_* disponibili.

Posso creare grafici in un file Excel esistente?

Sì. Carica la cartella di lavoro con Workbook("existing.xlsx"), accedi al foglio di destinazione e aggiungi un grafico utilizzando il metodo ws.charts.add_*() appropriato.

Come impostare il titolo del grafico?

Assegna una stringa semplice: chart.title = "My Chart Title". Non esiste alcuna sotto‑proprietà .text: il titolo è la stringa stessa.

Questo approccio è compatibile con pandas?

Sì. Scrivi i valori del pandas DataFrame nelle celle in un ciclo, poi aggiungi un grafico su quell’intervallo di dati.


Risorse correlate:

 Italiano