Como Criar Gráficos no Excel com Python

Como Criar Gráficos no Excel com Python

Gráficos transformam dados brutos de planilhas em insights visuais. Aspose.Cells FOSS for Python permite criar gráficos de colunas, linhas, barras e pizza programaticamente, com controle total sobre séries de dados, rótulos de categoria, título do gráfico e posição, sem a necessidade do Microsoft Excel.

Por que criar gráficos com Aspose.Cells FOSS?

  1. Sem necessidade de Excel: Crie gráficos totalmente em Python, em qualquer SO.
  2. API método-por-tipo: Use add_bar(), add_line(), add_pie(), add_area(), e mais — um método por tipo de gráfico.
  3. Séries nomeadas: Configure cada série com os argumentos de palavra‑chave name=, category_data=.
  4. Posicionamento preciso: Controle os limites do gráfico por coordenadas de célula (top_row, left_col, bottom_row, right_col).

Guia passo a passo

Etapa 1: Instale o Aspose.Cells FOSS para Python

pip install aspose-cells-foss

Etapa 2: Criar uma Pasta de Trabalho e Preencher Dados

Crie uma nova pasta de trabalho e escreva dados numéricos mais rótulos de categoria nas células:

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

Etapa 3: Adicionar um Gráfico de Colunas

Use ws.charts.add_bar(top_row, left_col, bottom_row, right_col) para inserir um gráfico de colunas. O método retorna um objeto de gráfico diretamente:

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

Os índices de linha e coluna são baseados em zero.


Etapa 4: Configurar Série de Dados

Adicione cada série de dados usando chart.n_series.add() com argumentos nomeados:

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

O argumento category_data especifica o intervalo de células para os rótulos do eixo x. O argumento name define o rótulo da legenda da série.


Etapa 5: Definir o Título do Gráfico e os Dados de Categoria

Defina o título do gráfico como uma string simples:

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"

Etapa 6: Salvar a Pasta de Trabalho

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

Exemplo completo de gráfico de colunas:

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

Etapa 7: Criar um Gráfico de Linhas

O mesmo padrão 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 Comuns e Soluções

1. O gráfico aparece em branco ou vazio

Cause: O intervalo de dados passado para n_series.add() não contém valores, ou a string do intervalo de células está incorreta.
Fix: Verifique se o intervalo de células corresponde aos seus dados. Verifique se ws.cells["B2"].value não está None.

2. Rótulos de categoria não aparecem no eixo x

Cause: chart.category_data não foi definido, ou o intervalo aponta para células vazias.
Fix: Defina chart.category_data = "A2:A5" onde a coluna A contém suas strings de rótulo.

3. A posição do gráfico sobrepõe os dados

Causa: Os limites da linha em add_bar() se sobrepõem à área de dados.
Correção: Coloque o gráfico abaixo dos dados: ws.charts.add_bar(data_last_row + 2, 0, data_last_row + 18, 7).

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

Causa: A biblioteca FOSS usa API método‑por‑tipo, não add(ChartType.COLUMN, ...).
Correção: Use ws.charts.add_bar(...), ws.charts.add_line(...), ws.charts.add_pie(...) ou ws.charts.add_area(...).


Perguntas Frequentes

Quais tipos de gráfico são suportados?

Use add_bar(), add_line(), add_pie(), add_area() e add_stock() para os tipos mais comuns. Esses cinco têm suporte completo à serialização XML. Verifique a classe ChartCollection para a lista completa de métodos add_* disponíveis.

Posso criar gráficos em um arquivo Excel existente?

Sim. Carregue a pasta de trabalho com Workbook("existing.xlsx"), acesse a planilha de destino e adicione um gráfico usando o método ws.charts.add_*() apropriado.

Como defino o título do gráfico?

Atribua uma string simples: chart.title = "My Chart Title". Não há subpropriedade .text: o título é a própria string.

Esta abordagem é compatível com pandas?

Sim. Escreva os valores do DataFrame pandas em células em um loop, depois adicione um gráfico sobre esse intervalo de dados.


Recursos Relacionados:

 Português