Gerenciar Rótulos de Dados de Gráficos em Apresentações Usando Python
Introdução
Os rótulos de dados em um gráfico exibem detalhes sobre as séries de dados do gráfico ou pontos de dados individuais. Eles permitem que os leitores identifiquem rapidamente as séries de dados e também tornam os gráficos mais fáceis de entender.
Definir Precisão dos Dados nos Rótulos de Dados do Gráfico
Este código Python mostra como definir a precisão dos dados em um rótulo de dados de gráfico:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import ChartType, Presentation, SaveFormat
presentation = Presentation()
try:
chart = presentation.getSlides().get_Item(0).getShapes().addChart(ChartType.Line, 50, 50, 450, 300)
chart.setDataTable(True)
chart.getChartData().getSeries().get_Item(0).setNumberFormatOfValues("#,##0.00")
presentation.save("output.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Exibir Porcentagem como Rótulos
Aspose.Slides for Python via Java permite definir rótulos de porcentagem em gráficos exibidos. Este código Python demonstra a operação:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import ChartType, Portion, Presentation, SaveFormat
presentation = Presentation()
try:
slide = presentation.getSlides().get_Item(0)
chart = slide.getShapes().addChart(ChartType.StackedColumn, 20, 20, 400, 400)
chart_series = chart.getChartData().getSeries()
category_totals = [0.0] * chart.getChartData().getCategories().size()
for category_index in range(len(category_totals)):
for series_index in range(chart_series.size()):
data_point = chart_series.get_Item(series_index).getDataPoints().get_Item(category_index)
category_totals[category_index] += float(data_point.getValue().getData())
for series_index in range(chart_series.size()):
series = chart_series.get_Item(series_index)
series.getLabels().getDefaultDataLabelFormat().setShowLegendKey(False)
for point_index in range(series.getDataPoints().size()):
data_point = series.getDataPoints().get_Item(point_index)
label = data_point.getLabel()
if category_totals[point_index] == 0:
print(f"Cannot calculate a percentage for category {point_index}: the total is zero.")
continue
point_percentage = float(data_point.getValue().getData()) / category_totals[point_index] * 100
portion = Portion()
portion.setText(f"{point_percentage:.2f} %")
portion.getPortionFormat().setFontHeight(8)
label.getTextFrameForOverriding().setText("")
paragraph = label.getTextFrameForOverriding().getParagraphs().get_Item(0)
paragraph.getPortions().add(portion)
label_format = label.getDataLabelFormat()
label_format.setShowSeriesName(False)
label_format.setShowPercentage(False)
label_format.setShowLegendKey(False)
label_format.setShowCategoryName(False)
label_format.setShowBubbleSize(False)
presentation.save("output.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Definir Símbolo de Porcentagem nos Rótulos de Dados do Gráfico
Este código Python mostra como definir o símbolo de porcentagem para um rótulo de dados de gráfico:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import ChartType, FillType, Presentation, SaveFormat
Color = jpype.JClass("java.awt.Color")
presentation = Presentation()
try:
slide = presentation.getSlides().get_Item(0)
chart = slide.getShapes().addChart(ChartType.PercentsStackedColumn, 20, 20, 500, 400)
chart.getAxes().getVerticalAxis().setNumberFormatLinkedToSource(False)
chart.getAxes().getVerticalAxis().setNumberFormat("0.00%")
chart.getChartData().getSeries().clear()
worksheet_index = 0
workbook = chart.getChartData().getChartDataWorkbook()
# Adicionar a série vermelha.
series_cell = workbook.getCell(worksheet_index, 0, 1, "Reds")
red_series = chart.getChartData().getSeries().add(series_cell, chart.getType())
for row_index, value in enumerate([0.30, 0.50, 0.80, 0.65], start=1):
data_cell = workbook.getCell(worksheet_index, row_index, 1, jpype.JDouble(value))
red_series.getDataPoints().addDataPointForBarSeries(data_cell)
red_series.getFormat().getFill().setFillType(FillType.Solid)
red_series.getFormat().getFill().getSolidFillColor().setColor(Color.RED)
red_label_format = red_series.getLabels().getDefaultDataLabelFormat()
red_label_format.setShowValue(True)
red_label_format.setNumberFormatLinkedToSource(False)
red_label_format.setNumberFormat("0.0%")
red_portion_format = red_label_format.getTextFormat().getPortionFormat()
red_portion_format.setFontHeight(10)
red_portion_format.getFillFormat().setFillType(FillType.Solid)
red_portion_format.getFillFormat().getSolidFillColor().setColor(Color.WHITE)
# Adicionar a série azul.
series_cell = workbook.getCell(worksheet_index, 0, 2, "Blues")
blue_series = chart.getChartData().getSeries().add(series_cell, chart.getType())
for row_index, value in enumerate([0.70, 0.50, 0.20, 0.35], start=1):
data_cell = workbook.getCell(worksheet_index, row_index, 2, jpype.JDouble(value))
blue_series.getDataPoints().addDataPointForBarSeries(data_cell)
blue_series.getFormat().getFill().setFillType(FillType.Solid)
blue_series.getFormat().getFill().getSolidFillColor().setColor(Color.BLUE)
blue_label_format = blue_series.getLabels().getDefaultDataLabelFormat()
blue_label_format.setShowValue(True)
blue_label_format.setNumberFormatLinkedToSource(False)
blue_label_format.setNumberFormat("0.0%")
blue_portion_format = blue_label_format.getTextFormat().getPortionFormat()
blue_portion_format.setFontHeight(10)
blue_portion_format.getFillFormat().setFillType(FillType.Solid)
blue_portion_format.getFillFormat().getSolidFillColor().setColor(Color.WHITE)
presentation.save("SetDataLabelsPercentageSign_out.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Definir Distância do Rótulo a partir de um Eixo
Este código Python mostra como definir a distância do rótulo a partir de um eixo de categorias ao lidar com um gráfico plotado a partir de eixos:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import ChartType, Presentation, SaveFormat
presentation = Presentation()
try:
slide = presentation.getSlides().get_Item(0)
chart = slide.getShapes().addChart(ChartType.ClusteredColumn, 20, 20, 500, 300)
chart.getAxes().getHorizontalAxis().setLabelOffset(500)
presentation.save("output.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Ajustar Localização do Rótulo
Quando você cria um gráfico que não depende de nenhum eixo, como um gráfico de pizza, os rótulos de dados do gráfico podem acabar ficando muito próximos da sua borda. Nesse caso, é necessário ajustar a localização do rótulo de dados para que as linhas guia sejam exibidas claramente.
Este código Python mostra como ajustar a localização do rótulo em um gráfico de pizza:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import ChartType, LegendDataLabelPosition, Presentation, SaveFormat
presentation = Presentation()
try:
chart = presentation.getSlides().get_Item(0).getShapes().addChart(ChartType.Pie, 50, 50, 200, 200)
series = chart.getChartData().getSeries()
label = series.get_Item(0).getLabels().get_Item(0)
label.getDataLabelFormat().setShowValue(True)
label.getDataLabelFormat().setPosition(LegendDataLabelPosition.OutsideEnd)
label.setX(0.71)
label.setY(0.04)
presentation.save("pres.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()

Perguntas Frequentes
Como posso evitar que os rótulos de dados se sobreponham em gráficos densos?
Combine posicionamento automático de rótulos, linhas guia e redução do tamanho da fonte; se necessário, oculte alguns campos (por exemplo, a categoria) ou exiba rótulos apenas para pontos extremos/chave.
Como posso desativar rótulos apenas para valores zero, negativos ou vazios?
Filtre os pontos de dados antes de habilitar os rótulos e desative a exibição para valores 0, valores negativos ou valores ausentes de acordo com uma regra definida.
Como posso garantir um estilo consistente de rótulo ao exportar para PDF/imagens?
Defina explicitamente as fontes (família, tamanho) e verifique se a fonte está disponível no lado de renderização para evitar o fallback.