Verwalten von Diagramm-Datenbeschriftungen in Präsentationen mit Python
Einleitung
Datenbeschriftungen in einem Diagramm zeigen Details zur Datenreihe des Diagramms oder zu einzelnen Datenpunkten an. Sie ermöglichen es den Lesern, Datenreihen schnell zu identifizieren, und erleichtern das Verständnis von Diagrammen.
Datenpräzision in Diagramm-Datenbeschriftungen festlegen
Dieser Python‑Code zeigt, wie Sie die Datenpräzision in einer Diagramm‑Datenbeschriftung festlegen:
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()
Prozentsatz als Beschriftungen anzeigen
Aspose.Slides für Python über Java ermöglicht das Festlegen von Prozentwerten als Beschriftungen in angezeigten Diagrammen. Dieser Python‑Code demonstriert die Vorgehensweise:
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()
Prozentzeichen bei Diagramm‑Datenbeschriftungen festlegen
Dieser Python‑Code zeigt, wie Sie das Prozentzeichen für eine Diagramm‑Datenbeschriftung festlegen:
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()
# Rote Serie hinzufügen.
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)
# Blaue Serie hinzufügen.
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()
Abstand der Beschriftung von einer Achse festlegen
Dieser Python‑Code zeigt, wie Sie den Abstand der Beschriftung von einer Kategorienachse festlegen, wenn Sie ein Diagramm anhand von Achsen erzeugen:
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()
Beschriftungsposition anpassen
Wenn Sie ein Diagramm erstellen, das keine Achse verwendet, beispielsweise ein Kreisdiagramm, können die Datenbeschriftungen des Diagramms zu nahe am Rand liegen. In einem solchen Fall müssen Sie die Position der Datenbeschriftung anpassen, damit die Verbindungslinien klar angezeigt werden.
Dieser Python‑Code zeigt, wie Sie die Beschriftungsposition in einem Kreisdiagramm anpassen:
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()

FAQ
Wie kann ich verhindern, dass Datenbeschriftungen in dichten Diagrammen überlappen?
Kombinieren Sie automatische Beschriftungsplatzierung, Verbindungslinien und reduzierte Schriftgröße; bei Bedarf können Sie einige Felder (z. B. die Kategorie) ausblenden oder Beschriftungen nur für extreme bzw. wichtige Punkte anzeigen.
Wie kann ich Beschriftungen nur für Null‑, negative oder leere Werte deaktivieren?
Filtern Sie Datenpunkte, bevor Sie die Beschriftungen aktivieren, und schalten Sie die Anzeige für Werte von 0, negative Werte oder fehlende Werte gemäß einer definierten Regel aus.
Wie kann ich einen konsistenten Beschriftungsstil beim Exportieren in PDF/Bilder sicherstellen?
Legen Sie Schriftarten (Familie, Größe) explizit fest und überprüfen Sie, dass die Schriftart auf der Renderseite verfügbar ist, um einen Fallback zu vermeiden.