Trabalhar com gráficos
Resumo geral
Aspose.Cells FOSS uses a method-per-chart-type API. Instead of a generic add(ChartType.X, ...) chamadas, cada tipo de gráfico tem o seu próprio método dedicado em a folha de trabalho charts Coleção:
| Método de avaliação | Tipo de gráfico |
|---|---|
ws.charts.add_bar(top_row, left_col, bottom_row, right_col) | Coluna agrupada (gráfico de barras) |
ws.charts.add_line(top_row, left_col, bottom_row, right_col) | Linha de |
ws.charts.add_pie(top_row, left_col, bottom_row, right_col) | Torta . |
ws.charts.add_area(top_row, left_col, bottom_row, right_col) | Área de exploração |
Todos os quatro parâmetros de posição descrevem a área retangular da folha onde: Os índices de linha e coluna são: baseada em zero.Cada um . método retorna um Chart objeto que você configurar mais antes de salvar.
Limitação: Apenas os tipos de gráfico LINE, BAR, PIE, AREA e STOCK podem ser salvos para XLSX. Chamando
wb.save()com uma pasta de trabalho que contenha qualquer outro tipo de gráfico (por exemplo, SCATTER, WATERFALL, RADAR, TREEMAP, HISTOGRAM) irá levantarNotImplementedError.
Adicionar um gráfico de colunas
O exemplo abaixo escreve um pequeno conjunto de dados sobre receitas por produto e adiciona então uma coluna posicionada abaixo dos dados.
from aspose.cells_foss import Workbook, Cell
workbook = Workbook()
ws = workbook.worksheets[0]
##--- Data ---
ws.cells["A1"].value = "Product"
ws.cells["B1"].value = "Revenue"
products = ["Widget A", "Widget B", "Widget C", "Widget D", "Widget E"]
revenues = [12_500, 18_200, 9_800, 21_400, 15_600]
for i, (product, revenue) in enumerate(zip(products, revenues), start=2):
ws.cells[f"A{i}"].value = product
ws.cells[f"B{i}"].value = revenue
##--- Chart (rows 7—22, columns A—H, all zero-based) ---
##top_row=6, left_col=0, bottom_row=22, right_col=7
chart = ws.charts.add_bar(6, 0, 22, 7)
chart.title = "Revenue by Product"
chart.n_series.add("B2:B6", category_data="A2:A6", name="Revenue (USD)")
chart.show_legend = True
chart.legend_position = "bottom"
workbook.save("column_chart.xlsx")
print("Saved column_chart.xlsx")Os dados ocupam as linhas 16 (linhas 05 com base em zero), por isso: top_row=6 coloca o O gráfico imediatamente abaixo, sem sobrepor os dados.
Adicionando um gráfico de linhas
Os gráficos lineares funcionam bem para mostrar tendências ao longo do tempo. idêntico a: add_bar apenas o nome do método muda.
from aspose.cells_foss import Workbook, Cell
workbook = Workbook()
ws = workbook.worksheets[0]
##--- Monthly trend data ---
ws.cells["A1"].value = "Month"
ws.cells["B1"].value = "Page Views"
ws.cells["C1"].value = "Conversions"
months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun"]
page_views = [4_200, 5_100, 4_800, 6_300, 7_100, 6_800]
conversions = [ 210, 255, 230, 340, 390, 360]
for i, (month, pv, cv) in enumerate(zip(months, page_views, conversions), start=2):
ws.cells[f"A{i}"].value = month
ws.cells[f"B{i}"].value = pv
ws.cells[f"C{i}"].value = cv
##--- Line chart below the data ---
chart = ws.charts.add_line(8, 0, 24, 8)
chart.title = "Monthly Website Metrics"
chart.n_series.add("B2:B7", category_data="A2:A7", name="Page Views")
chart.n_series.add("C2:C7", category_data="A2:A7", name="Conversions")
chart.show_legend = True
chart.legend_position = "bottom"
workbook.save("line_chart.xlsx")
print("Saved line_chart.xlsx")Título e lenda do gráfico
Configurar o título do gráfico atribuindo uma cadeia simples diretamente para chart.title.O . A propriedade aceita um str não tentem aceder a uma subpropriedade como: .title.text, que não existe nesta biblioteca.
##Correct
chart.title = "Quarterly Sales"
##Wrong – raises AttributeError
##chart.title.text = "Quarterly Sales"A visibilidade e a posição das lendas são controladas por duas propriedades:
chart.show_legend = True # display the legend
chart.legend_position = "bottom" # "bottom", "top", "left", "right"Para esconder a lenda completamente, colocou chart.show_legend = False.O . legend_position O valor é ignorado quando a lenda está escondida.
Configuração de séries de dados
Utilização: chart.n_series.add() Para anexar intervalos de dados a um gráfico. Passe todos argumentos como: argumentos de palavras-chave Para evitar confusões em relação à ordem de posição:
chart.n_series.add("B2:B6", category_data="A2:A6", name="Revenue")Você pode adicionar várias séries para um único gráfico, chamando n_series.add mais Cada chamada acrescenta uma nova série:
from aspose.cells_foss import Workbook, Cell
workbook = Workbook()
ws = workbook.worksheets[0]
##Headers
ws.cells["A1"].value = "Quarter"
ws.cells["B1"].value = "North"
ws.cells["C1"].value = "South"
ws.cells["D1"].value = "East"
data = [
("Q1", 8_400, 6_100, 7_200),
("Q2", 9_200, 7_400, 8_100),
("Q3", 10_500, 8_900, 9_600),
("Q4", 11_800, 9_300, 10_200),
]
for i, row in enumerate(data, start=2):
ws.cells[f"A{i}"].value = row[0]
ws.cells[f"B{i}"].value = row[1]
ws.cells[f"C{i}"].value = row[2]
ws.cells[f"D{i}"].value = row[3]
chart = ws.charts.add_bar(6, 0, 22, 8)
chart.title = "Regional Sales by Quarter"
chart.n_series.add("B2:B5", category_data="A2:A5", name="North")
chart.n_series.add("C2:C5", category_data="A2:A5", name="South")
chart.n_series.add("D2:D5", category_data="A2:A5", name="East")
chart.show_legend = True
chart.legend_position = "bottom"
workbook.save("multi_series_chart.xlsx")
print("Saved multi_series_chart.xlsx")Dados de categoria
Os rótulos de categoria podem ser definidos a nível do gráfico ou ao nível das séries individuais.
Dados de categoria a nível gráfico aplica-se a todas as séries por defeito:
chart.category_data = "A2:A5"Dados de categoria a nível da série (através da Comissão) category_data argumento de palavra-chave para n_series.add) sobrepõe a definição de nível do gráfico para essa série específica:
chart.n_series.add("B2:B5", category_data="A2:A5", name="Revenue")Quando todas as séries partilham a mesma gama de categorias, o ajuste chart.category_data Quando as séries têm diferentes intervalos de categoria por exemplo, dois conjuntos de dados com períodos diferentes utilizar o argumento da palavra-chave por série; Em vez disso.
Posicionamento no gráfico
Os quatro parâmetros de posição para cada add_* método definir um limite Rectângulo na folha, medido em índices de linha e coluna baseados no zero:
add_bar(top_row, left_col, bottom_row, right_col)| Parâmetro: | Significado |
|---|---|
top_row | Índice baseado em zero da primeira linha ocupada pelo gráfico |
left_col | Índice baseado em zero da coluna mais à esquerda |
bottom_row | Índice baseado em zero da última linha ocupada pelo gráfico |
right_col | Índice baseado em zero da coluna mais à direita |
Um padrão comum é colocar o gráfico diretamente abaixo dos dados. termina na linha 6 do Excel (índice de linha baseada em zero 5), começa o gráfico no top_row=6:
from aspose.cells_foss import Workbook, Cell
workbook = Workbook()
ws = workbook.worksheets[0]
##Data in rows 1—5 (zero-based 0—4)
labels = ["Alpha", "Beta", "Gamma", "Delta", "Epsilon"]
values = [30, 45, 28, 60, 52]
ws.cells["A1"].value = "Category"
ws.cells["B1"].value = "Score"
for i, (label, val) in enumerate(zip(labels, values), start=2):
ws.cells[f"A{i}"].value = label
ws.cells[f"B{i}"].value = val
##Data ends at zero-based row 5 (Excel row 6).
##Place chart from row 6 to row 22, columns A—H (0—7).
chart = ws.charts.add_bar(6, 0, 22, 7)
chart.title = "Category Scores"
chart.n_series.add("B2:B6", category_data="A2:A6", name="Score")
chart.show_legend = False
workbook.save("positioned_chart.xlsx")
print("Saved positioned_chart.xlsx")Faça o gráfico suficientemente alto para ser legível: uma altura de pelo menos 15 linhas (linha inferior - linha superior >= 15) e uma largura de, pelo mínimo, 6 colunas é um ponto de partida razoável.
Erros comuns
| Errado . | - Certo. | Porquê ? |
|---|---|---|
ws.charts.add(ChartType.COLUMN, ...) | ws.charts.add_bar(...) | Não ligue. ws.charts.add(ChartType.X, ...) Diretamente para tipos não suportados elevará o valor de um tipo de produto a uma taxa de referência superior à média do preço. NotImplementedError Para 11 dos 16 tipos de gráficos, utilizar: add_bar(), add_line(), add_pie(), add_area(), ou add_stock() Em vez disso. |
chart.title.text = "My Chart" | chart.title = "My Chart" | chart.title é uma propriedade de string simples, não um objeto com a .text Subpropriedade. |
chart.n_series.add("B2:B5", "A2:A5", "Revenue") | chart.n_series.add("B2:B5", category_data="A2:A5", name="Revenue") | O segundo e terceiro parâmetros devem ser passados como argumentos de palavra-chave para evitar ambiguidades. |
chart = ws.charts.add_bar(0, 0, 15, 7) (dados de sobreposição) | Local de realização: top_row abaixo da última linha de dados | Um gráfico que sobrepõe dados obscurece valores e causa layouts confusos. |
chart.legend_position = "bottom" sem chart.show_legend = True | Set (s) chart.show_legend = True Primeiro . | legend_position não tem efeito quando: show_legend é: False. |
Ver também:
- Referência API: Documentação completa de classe e método para:
aspose.cells_foss - Base de conhecimento:Guia de instruções orientado para as tarefas a desempenhar
- Descrição geral do produto: Resumo das características e capacidades
- Iniciação / Instalação: instalação e configuração de pip
- Blog: Python Excel Gráfico Tutorial:Guia de criação do gráfico passo a passo
- Aspose.Cells for Python — Enterprise Documentation