Por que criar gráficos programaticamente?
Pipelines de relatórios automatizados frequentemente precisam de gráficos incorporados em pastas de trabalho do Excel, como resumos trimestrais, painéis de resultados de ML ou métricas operacionais. Fazer isso sem o Microsoft Excel significa sem custo de licenciamento e sem interação com a interface gráfica.
Aspose.Cells FOSS for Python fornece uma API de gráficos limpa e Pythonic: um método por tipo de gráfico, uma string simples para o título e configuração de séries baseada em argumentos nomeados. A API completa está descrita abaixo.
Instalar
pip install aspose-cells-foss
Importe as classes que você precisa:
from aspose.cells_foss import Workbook, Cell
Gráficos são acessados via ws.charts; não é necessário importar um módulo de gráfico separado.
Visão geral da API de Gráficos
| O que você quer | Como fazer isso |
|---|---|
| Adicionar um gráfico de colunas | ws.charts.add_bar(top_row, left_col, bottom_row, right_col) |
| Adicionar um gráfico de linhas | ws.charts.add_line(top_row, left_col, bottom_row, right_col) |
| Adicionar um gráfico de barras | ws.charts.add_bar(top_row, left_col, bottom_row, right_col) |
| Adicionar um gráfico de pizza | ws.charts.add_pie(top_row, left_col, bottom_row, right_col) |
| Definir o título | chart.title = "My Chart" (string simples; não .title.text) |
| Definir categorias do eixo x | chart.category_data = "A2:A6" |
| Adicionar uma série nomeada | chart.n_series.add("B2:B6", category_data="A2:A6", name="Revenue") |
| Exibir legenda | chart.show_legend = True |
| Definir posição da legenda | chart.legend_position = "bottom" |
Todos os índices de linhas e colunas são baseados em zero. O add_* métodos retornam o Chart objeto diretamente (não um índice).
Gráfico de Colunas: Passo a Passo
Vamos criar um gráfico de colunas que mostra a receita e despesas trimestrais.
Passo 1: Crie a pasta de trabalho e escreva os dados
from aspose.cells_foss import Workbook, Cell
wb = Workbook()
ws = wb.worksheets[0]
ws.name = "Q1-Q4 Report"
##Headers
ws.cells["A1"].value = "Quarter"
ws.cells["B1"].value = "Revenue"
ws.cells["C1"].value = "Expenses"
##Data
quarters = ["Q1", "Q2", "Q3", "Q4"]
revenue = [50000, 62000, 71000, 89000]
expenses = [32000, 38000, 41000, 47000]
for i, (q, r, e) in enumerate(zip(quarters, revenue, expenses), start=2):
ws.cells[f"A{i}"].value = q
ws.cells[f"B{i}"].value = r
ws.cells[f"C{i}"].value = e
Passo 2: Adicione o gráfico
Posicione o gráfico abaixo dos dados (a partir da linha 7, abrangendo as colunas 0-8):
chart = ws.charts.add_bar(6, 0, 22, 8)
Passo 3: Configure o título e a legenda
chart.title = "Quarterly Revenue vs Expenses"
chart.show_legend = True
chart.legend_position = "bottom"
Etapa 4: Adicionar série de dados
Cada série precisa de um intervalo de valores, intervalo de categorias e um nome:
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")
Etapa 5: Salvar
wb.save("quarterly_report.xlsx")
print("Chart saved to quarterly_report.xlsx")
Exemplo completo em um bloco:
from aspose.cells_foss import Workbook, Cell
wb = Workbook()
ws = wb.worksheets[0]
ws.name = "Q1-Q4 Report"
##Data
ws.cells["A1"].value = "Quarter"
ws.cells["B1"].value = "Revenue"
ws.cells["C1"].value = "Expenses"
data = [("Q1", 50000, 32000), ("Q2", 62000, 38000),
("Q3", 71000, 41000), ("Q4", 89000, 47000)]
for i, (q, r, e) in enumerate(data, start=2):
ws.cells[f"A{i}"].value = q
ws.cells[f"B{i}"].value = r
ws.cells[f"C{i}"].value = e
chart = ws.charts.add_bar(6, 0, 22, 8)
chart.title = "Quarterly Revenue 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"
wb.save("quarterly_report.xlsx")
Gráfico de Linha: Tendência Mensal
O mesmo padrão funciona para add_line():
from aspose.cells_foss import Workbook, Cell
wb = Workbook()
ws = wb.worksheets[0]
months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun"]
actuals = [42000, 47500, 53000, 49000, 61000, 68000]
targets = [45000, 45000, 50000, 55000, 60000, 65000]
ws.cells["A1"].value = "Month"
ws.cells["B1"].value = "Actual"
ws.cells["C1"].value = "Target"
for i, (m, a, t) in enumerate(zip(months, actuals, targets), start=2):
ws.cells[f"A{i}"].value = m
ws.cells[f"B{i}"].value = a
ws.cells[f"C{i}"].value = t
chart = ws.charts.add_line(8, 0, 24, 8)
chart.title = "Monthly Revenue: Actual vs Target"
chart.category_data = "A2:A7"
chart.n_series.add("B2:B7", category_data="A2:A7", name="Actual")
chart.n_series.add("C2:C7", category_data="A2:A7", name="Target")
chart.show_legend = True
chart.legend_position = "right"
wb.save("monthly_trend.xlsx")
Gráfico de Pizza: Participação de Mercado
from aspose.cells_foss import Workbook, Cell
wb = Workbook()
ws = wb.worksheets[0]
segments = ["Product A", "Product B", "Product C", "Product D"]
shares = [40, 25, 20, 15]
ws.cells["A1"].value = "Segment"
ws.cells["B1"].value = "Share %"
for i, (s, v) in enumerate(zip(segments, shares), start=2):
ws.cells[f"A{i}"].value = s
ws.cells[f"B{i}"].value = v
chart = ws.charts.add_pie(6, 0, 20, 7)
chart.title = "Market Share by Product"
chart.category_data = "A2:A5"
chart.n_series.add("B2:B5", category_data="A2:A5", name="Share")
chart.show_legend = True
chart.legend_position = "right"
wb.save("market_share.xlsx")
Erros Comuns a Evitar
| Errado | Direita |
|---|---|
ws.charts.add(ChartType.COLUMN, 5, 0, 15, 5) | ws.charts.add_bar(5, 0, 15, 5) |
chart.title.text = "Revenue" | chart.title = "Revenue" |
chart.n_series.add("B2:B5", True) (posicional) | chart.n_series.add("B2:B5", category_data="A2:A5", name="Revenue") |
from aspose.cells.charts import ChartType | Não necessário; use ws.charts.add_bar() diretamente |
chart.n_series.category_data = "A2:A5" | chart.category_data = "A2:A5" (nível do gráfico) |
Recursos
- Aspose.Cells FOSS for Python: Installation
- Guia do Desenvolvedor: Criação de Gráficos
- Referência da API: ChartCollection, Chart, NSeries
- Base de Conhecimento: Como Criar Gráficos em Python
- Visão geral do produto: Resumo de recursos e capacidades
- Blog: Apresentando Aspose.Cells FOSS: Visão geral da biblioteca e início rápido
- Repositório GitHub