Beheer diagramgegevenslabels in presentaties met PHP
Inleiding
Gegevenslabels op een diagram tonen details over de dataseries van het diagram of individuele gegevenspunten. Ze stellen lezers in staat om snel de dataseries te identificeren en maken diagrammen bovendien gemakkelijker te begrijpen.
Stel de precisie van gegevens in in diagramgegevenslabels
Deze PHP‑code toont hoe u de precisie van gegevens instelt in een diagramgegevenslabel:
$pres = new Presentation();
try {
$chart = $pres->getSlides()->get_Item(0)->getShapes()->addChart(ChartType::Line, 50, 50, 450, 300);
$chart->setDataTable(true);
$chart->getChartData()->getSeries()->get_Item(0)->setNumberFormatOfValues("#,##0.00");
$pres->save("output.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Percentage weergeven als labels
Aspose.Slides for PHP via Java maakt het mogelijk om percentagelabels in weergegeven diagrammen in te stellen. Deze PHP‑code demonstreert de werking:
# Creëert een instantie van de Presentation-klasse
$pres = new Presentation();
try {
# Haalt de eerste dia op
$slide = $pres->getSlides()->get_Item(0);
$chart = $slide->getShapes()->addChart(ChartType::StackedColumn, 20, 20, 400, 400);
$series;
$total_for_Cat = new double[$chart->getChartData()->getCategories()->size()];
for($k = 0; $k < java_values($chart->getChartData()->getCategories()->size()) ; $k++) {
$cat = $chart->getChartData()->getCategories()->get_Item($k);
for($i = 0; $i < java_values($chart->getChartData()->getSeries()->size()) ; $i++) {
$total_for_Cat[$k] = $total_for_Cat[$k] + $chart->getChartData()->getSeries()->get_Item($i)->getDataPoints()->get_Item($k)->getValue()->getData();
}
}
$dataPontPercent = 0.0;
for($x = 0; $x < java_values($chart->getChartData()->getSeries()->size()) ; $x++) {
$series = $chart->getChartData()->getSeries()->get_Item($x);
$series->getLabels()->getDefaultDataLabelFormat()->setShowLegendKey(false);
for($j = 0; $j < java_values($series->getDataPoints()->size()) ; $j++) {
$lbl = $series->getDataPoints()->get_Item($j)->getLabel();
$dataPontPercent = $series->getDataPoints()->get_Item($j)->getValue()->getData() / $total_for_Cat[$j] * 100;
$port = new Portion();
$port->setText(sprintf("{0:F2} %.2f", $dataPontPercent));
$port->getPortionFormat()->setFontHeight(8.0);
$lbl->getTextFrameForOverriding()->setText("");
$para = $lbl->getTextFrameForOverriding()->getParagraphs()->get_Item(0);
$para->getPortions()->add($port);
$lbl->getDataLabelFormat()->setShowSeriesName(false);
$lbl->getDataLabelFormat()->setShowPercentage(false);
$lbl->getDataLabelFormat()->setShowLegendKey(false);
$lbl->getDataLabelFormat()->setShowCategoryName(false);
$lbl->getDataLabelFormat()->setShowBubbleSize(false);
}
}
# Slaat de presentatie met de grafiek op
$pres->save("output.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Stel het percentageteken in bij diagramgegevenslabels
Deze PHP‑code toont hoe u het percentageteken instelt voor een diagramgegevenslabel:
# Creëert een instantie van de Presentation-klasse
$pres = new Presentation();
try {
# Haalt de referentie van een dia op via de index
$slide = $pres->getSlides()->get_Item(0);
# Maakt het PercentsStackedColumn-diagram op een dia
$chart = $slide->getShapes()->addChart(ChartType::PercentsStackedColumn, 20, 20, 500, 400);
# Stelt NumberFormatLinkedToSource in op false
$chart->getAxes()->getVerticalAxis()->setNumberFormatLinkedToSource(false);
$chart->getAxes()->getVerticalAxis()->setNumberFormat("0.00%");
$chart->getChartData()->getSeries()->clear();
$defaultWorksheetIndex = 0;
# Haalt het werkblad met diagramgegevens op
$workbook = $chart->getChartData()->getChartDataWorkbook();
# Voegt een nieuwe serie toe
$series = $chart->getChartData()->getSeries()->add($workbook->getCell($defaultWorksheetIndex, 0, 1, "Reds"), $chart->getType());
$series->getDataPoints()->addDataPointForBarSeries($workbook->getCell($defaultWorksheetIndex, 1, 1, 0.3));
$series->getDataPoints()->addDataPointForBarSeries($workbook->getCell($defaultWorksheetIndex, 2, 1, 0.5));
$series->getDataPoints()->addDataPointForBarSeries($workbook->getCell($defaultWorksheetIndex, 3, 1, 0.8));
$series->getDataPoints()->addDataPointForBarSeries($workbook->getCell($defaultWorksheetIndex, 4, 1, 0.65));
# Stelt de vulkleur van de serie in
$series->getFormat()->getFill()->setFillType(FillType::Solid);
$series->getFormat()->getFill()->getSolidFillColor()->setColor(java("java.awt.Color")->RED);
# Stelt de eigenschappen van LabelFormat in
$series->getLabels()->getDefaultDataLabelFormat()->setShowValue(true);
$series->getLabels()->getDefaultDataLabelFormat()->setNumberFormatLinkedToSource(false);
$series->getLabels()->getDefaultDataLabelFormat()->setNumberFormat("0.0%");
$series->getLabels()->getDefaultDataLabelFormat()->getTextFormat()->getPortionFormat()->setFontHeight(10);
$series->getLabels()->getDefaultDataLabelFormat()->getTextFormat()->getPortionFormat()->getFillFormat()->setFillType(FillType::Solid);
$series->getLabels()->getDefaultDataLabelFormat()->getTextFormat()->getPortionFormat()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->WHITE);
$series->getLabels()->getDefaultDataLabelFormat()->setShowValue(true);
# Voegt een nieuwe serie toe
$series2 = $chart->getChartData()->getSeries()->add($workbook->getCell($defaultWorksheetIndex, 0, 2, "Blues"), $chart->getType());
$series2->getDataPoints()->addDataPointForBarSeries($workbook->getCell($defaultWorksheetIndex, 1, 2, 0.7));
$series2->getDataPoints()->addDataPointForBarSeries($workbook->getCell($defaultWorksheetIndex, 2, 2, 0.5));
$series2->getDataPoints()->addDataPointForBarSeries($workbook->getCell($defaultWorksheetIndex, 3, 2, 0.2));
$series2->getDataPoints()->addDataPointForBarSeries($workbook->getCell($defaultWorksheetIndex, 4, 2, 0.35));
# Stelt vultype en -kleur in
$series2->getFormat()->getFill()->setFillType(FillType::Solid);
$series2->getFormat()->getFill()->getSolidFillColor()->setColor(java("java.awt.Color")->BLUE);
$series2->getLabels()->getDefaultDataLabelFormat()->setShowValue(true);
$series2->getLabels()->getDefaultDataLabelFormat()->setNumberFormatLinkedToSource(false);
$series2->getLabels()->getDefaultDataLabelFormat()->setNumberFormat("0.0%");
$series2->getLabels()->getDefaultDataLabelFormat()->getTextFormat()->getPortionFormat()->setFontHeight(10);
$series2->getLabels()->getDefaultDataLabelFormat()->getTextFormat()->getPortionFormat()->getFillFormat()->setFillType(FillType::Solid);
$series2->getLabels()->getDefaultDataLabelFormat()->getTextFormat()->getPortionFormat()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->WHITE);
# Schrijft de presentatie naar schijf
$pres->save("SetDataLabelsPercentageSign_out.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Stel de labelafstand vanaf een as in
Deze PHP‑code toont hoe u de labelafstand vanaf een categorieas instelt wanneer u een diagram hebt dat op assen is geplot:
# Creëert een instantie van de Presentation-klasse
$pres = new Presentation();
try {
# Haalt een referentie naar een dia op
$sld = $pres->getSlides()->get_Item(0);
# Maakt een diagram op de dia
$ch = $sld->getShapes()->addChart(ChartType::ClusteredColumn, 20, 20, 500, 300);
# Stelt de labelafstand ten opzichte van een as in
$ch->getAxes()->getHorizontalAxis()->setLabelOffset(500);
# Schrijft de presentatie naar schijf
$pres->save("output.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Labellocatie aanpassen
Wanneer u een diagram maakt dat niet op een as berust, zoals een taartdiagram, kunnen de gegevenslabels van het diagram te dicht bij de rand komen te liggen. In dat geval moet u de locatie van het gegevenslabel aanpassen zodat de verbindingslijnen duidelijk worden weergegeven.
Deze PHP‑code toont hoe u de labellocatie op een taartdiagram aanpast:
$pres = new Presentation();
try {
$chart = $pres->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);
$pres->save("pres.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}

FAQ
Hoe kan ik voorkomen dat gegevenslabels overlappen in dichte diagrammen?
Combineer automatische labelplaatsing, verbindingslijnen en een verkleinde lettergrootte; verberg indien nodig enkele velden (bijvoorbeeld de categorie) of toon labels alleen voor uiterste/sleutelpunten.
Hoe kan ik labels uitschakelen alleen voor nul‑, negatieve of lege waarden?
Filter gegevenspunten voordat u labels inschakelt en schakel de weergave uit voor waarden van 0, negatieve waarden of ontbrekende waarden volgens een gedefinieerde regel.
Hoe kan ik een consistente labelstijl garanderen bij het exporteren naar PDF/afbeeldingen?
Stel expliciet lettertypen in (familie, grootte) en controleer of het lettertype beschikbaar is aan de renderzijde om fallback te voorkomen.