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?
- Sem necessidade de Excel: Crie gráficos totalmente em Python, em qualquer SO.
- API método-por-tipo: Use
add_bar(),add_line(),add_pie(),add_area(), e mais — um método por tipo de gráfico. - Séries nomeadas: Configure cada série com os argumentos de palavra‑chave
name=,category_data=. - 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-fossEtapa 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 = 47000Etapa 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: