Cómo crear gráficos en Excel con Python

Cómo crear gráficos en Excel con Python

Los gráficos convierten los datos sin procesar de la hoja de cálculo en ideas visuales. Aspose.Cells FOSS for Python le permite crear gráficos de columnas, líneas, barras y sectores de forma programática, con control total sobre las series de datos, las etiquetas de categoría, el título del gráfico y la posición, sin requerir Microsoft Excel.

¿Por qué crear gráficos con Aspose.Cells FOSS?

  1. No se requiere Excel: Crea gráficos completamente en Python, en cualquier SO.
  2. API método-por-tipo: Usa add_bar(), add_line(), add_pie(), add_area(), y más — un método por tipo de gráfico.
  3. Series nombradas: Configura cada serie con los argumentos de palabra clave name=, category_data=.
  4. Ubicación precisa: Controla los límites del gráfico mediante coordenadas de celda (top_row, left_col, bottom_row, right_col).

Guía paso a paso

Paso 1: Instalar Aspose.Cells FOSS para Python

pip install aspose-cells-foss

Paso 2: Crear un libro de trabajo y poblar datos

Cree un nuevo libro de trabajo y escriba datos numéricos más etiquetas de categoría en las celdas:

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

Paso 3: Añadir un gráfico de columnas

Use ws.charts.add_bar(top_row, left_col, bottom_row, right_col) para insertar un gráfico de columnas. El método devuelve un objeto de gráfico directamente:

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

Los índices de fila y columna son de base cero.


Paso 4: Configurar series de datos

Agregue cada serie de datos usando chart.n_series.add() con argumentos de palabra clave:

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

El argumento category_data especifica el rango de celdas para las etiquetas del eje x. El argumento name establece la etiqueta de la leyenda de la serie.


Paso 5: Establecer el título del gráfico y los datos de categoría

Establezca el título del gráfico como 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"

Paso 6: Guardar el libro de trabajo

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

Ejemplo completo de gráfico de columnas:

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

Paso 7: Crear un gráfico de líneas

El mismo patrón funciona para 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")

Problemas comunes y soluciones

1. El gráfico aparece en blanco o vacío

Causa: El rango de datos pasado a n_series.add() no contiene valores, o la cadena del rango de celdas es incorrecta.
Solución: Verifique que el rango de celdas coincida con sus datos. Compruebe que ws.cells["B2"].value no sea None.

2. Las etiquetas de categoría no se muestran en el eje x

Causa: chart.category_data no se estableció, o el rango apunta a celdas vacías.
Solución: Establezca chart.category_data = "A2:A5" donde la columna A contenga sus cadenas de etiquetas.

3. La posición del gráfico se superpone a los datos

Causa: Los límites de fila en add_bar() se superponen con el área de datos.
Solución: Coloque el gráfico debajo de los datos: ws.charts.add_bar(data_last_row + 2, 0, data_last_row + 18, 7).

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

Causa: La biblioteca FOSS utiliza una API método‑por‑tipo, no add(ChartType.COLUMN, ...).
Solución: Utilice ws.charts.add_bar(...), ws.charts.add_line(...), ws.charts.add_pie(...) o ws.charts.add_area(...).


Preguntas Frecuentes

¿Qué tipos de gráficos son compatibles?

Utilice add_bar(), add_line(), add_pie(), add_area() y add_stock() para los tipos más comunes. Estos cinco tienen soporte completo de serialización XML. Consulte la clase ChartCollection para obtener la lista completa de métodos add_* disponibles.

¿Puedo crear gráficos en un archivo Excel existente?

Sí. Cargue el libro de trabajo con Workbook("existing.xlsx"), acceda a la hoja de destino y añada un gráfico usando el método ws.charts.add_*() apropiado.

¿Cómo establezco el título del gráfico?

Asigne una cadena simple: chart.title = "My Chart Title". No hay subpropiedad .text: el título es la propia cadena.

¿Es este enfoque compatible con pandas?

Sí. Escribe los valores del DataFrame de pandas en celdas dentro de un bucle, luego agrega un gráfico sobre ese rango de datos.


Recursos relacionados:

 Español