Com crear gràfics a Excel amb Python

Com crear gràfics a Excel amb Python

Els gràfics transformen les dades brutes del full de càlcul en informació visual. Aspose.Cells FOSS for Python us permet crear gràfics de columnes, línies, barres i pastís de manera programàtica, amb control total sobre les sèries de dades, les etiquetes de categoria, el títol del gràfic i la posició, sense requerir Microsoft Excel.

Per què crear gràfics amb Aspose.Cells FOSS?

  1. No cal Excel: Crea gràfics completament en Python, en qualsevol SO.
  2. API per mètode per tipus: Utilitza add_bar(), add_line(), add_pie(), add_area() i més — un mètode per tipus de gràfic.
  3. Sèries amb nom: Configura cada sèrie amb els arguments de paraula clau name=, category_data=.
  4. Posicionament precís: Controla els límits del gràfic mitjançant coordenades de cel·la (top_row, left_col, bottom_row, right_col).

Guia pas a pas

Pas 1: Instal·la Aspose.Cells FOSS per a Python

pip install aspose-cells-foss

Pas 2: Crea un llibre de treball i omple les dades

Creeu un nou llibre de treball i escriviu dades numèriques més etiquetes de categoria a les cel·les:

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

Pas 3: Afegeix un gràfic de columnes

Utilitzeu ws.charts.add_bar(top_row, left_col, bottom_row, right_col) per inserir un gràfic de columnes. El mètode retorna directament un objecte de gràfic:

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

Els índexs de fila i columna comencen a zero.


Pas 4: Configura la sèrie de dades

Afegeix cada sèrie de dades utilitzant chart.n_series.add() amb arguments de paraula clau:

##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’argument category_data especifica el rang de cel·les per a les etiquetes de l’eix X. L’argument name estableix l’etiqueta de la llegenda de la sèrie.


Pas 5: Defineix el títol del gràfic i les dades de categoria

Estableix el títol del gràfic com una cadena simple:

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"

Pas 6: Desa el llibre de treball

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

Exemple complet de gràfic de columnes:

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

Pas 7: Crea un gràfic de línies

El mateix patró funciona per a 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")

Problemes comuns i solucions

1. El gràfic apareix en blanc o buit

Causa: El rang de dades passat a n_series.add() no conté valors, o la cadena del rang de cel·les és incorrecta.
Solució: Verifiqueu que el rang de cel·les coincideixi amb les vostres dades. Comproveu que ws.cells["B2"].value no sigui None.

2. Les etiquetes de categoria no es mostren a l’eix X

Causa: chart.category_data no s’ha establert, o el rang apunta a cel·les buides.
Solució: Estableix chart.category_data = "A2:A5" on la columna A conté les teves cadenes d’etiquetes.

3. La posició del gràfic se superposa a les dades

Causa: Els límits de fila a add_bar() se superposen amb l’àrea de dades.
Solució: Col·loca el gràfic sota les dades: ws.charts.add_bar(data_last_row + 2, 0, data_last_row + 18, 7).

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

Cause: La biblioteca FOSS utilitza una API de mètode-per-tipus, no add(ChartType.COLUMN, ...).
Fix: Utilitzeu ws.charts.add_bar(...), ws.charts.add_line(...), ws.charts.add_pie(...) o ws.charts.add_area(...).


Preguntes freqüents

Quins tipus de gràfics són compatibles?

Utilitzeu add_bar(), add_line(), add_pie(), add_area() i add_stock() per als tipus més comuns. Aquests cinc tenen suport complet de serialització XML. Consulteu la classe ChartCollection per a la llista completa de mètodes add_* disponibles.

Puc crear gràfics en un fitxer Excel existent?

Sí. Carregueu el llibre de treball amb Workbook("existing.xlsx"), accediu al full de destinació i afegiu un gràfic utilitzant el mètode ws.charts.add_*() adequat.

Com puc establir el títol del gràfic?

Assigna una cadena simple: chart.title = "My Chart Title". No hi ha cap subpropietat .text: el títol és la cadena mateixa.

És aquest enfocament compatible amb pandas?

Sí. Escriu els valors del DataFrame de pandas a les cel·les en un bucle, i després afegeix un gràfic sobre aquest interval de dades.


Recursos relacionats:

 Català