Trendlijnen toevoegen aan presentatiediagrammen in Java
Overzicht
Dit artikel legt uit hoe u trendlijnen kunt toevoegen aan presentatiediagrammen met behulp van Aspose.Slides. Het laat zien hoe u een diagram maakt, trendlijnen toevoegt aan diagramreeksen en werkt met verschillende soorten trendlijnen, waaronder exponentieel, lineair, logaritmisch, voortschrijdend gemiddelde, polynomiaal en macht.
Het beschrijft ook hoe u een aangepaste lijn aan een diagram kunt toevoegen door een lijnvorm in te voegen, en bevat een korte FAQ over de waarden voor voortwaartse en achterwaartse projectie van trendlijnen en of trendlijnen behouden blijven bij export naar PDF of SVG en bij het renderen van diagrammen als afbeeldingen.
Een trendlijn toevoegen
Gebruik ITrendlineCollection.add om een trendlijn toe te voegen aan een diagramreeks, waarbij u het type selecteert met TrendlineType. Het voorbeeld maakt een gegroepeerd kolomdiagram met standaardgegevens en voegt twee trendlijnen toe aan elk van de drie reeksen.
De exponentiële trendlijn verbergt zijn vergelijking en R‑kwadraat‑waarde via setDisplayEquation en setDisplayRSquaredValue, terwijl de lineaire trendlijn rood is. De logaritmische trendlijn gebruikt addTextFrameForOverriding voor een aangepast label. Het voortschrijdende gemiddelde gebruikt een setPeriod van drie gegevenspunten en een aangepaste setTrendlineName.
De polynomiale trendlijn heeft een setOrder van drie en strekt zich één categorie vooruit uit via setForward. De machts‑trendlijn strekt zich één categorie achterwaarts uit via setBackward.
import com.aspose.slides.*;
import java.awt.Color;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
IChart chart = slide.getShapes().addChart(ChartType.ClusteredColumn, 20, 20, 500, 400);
IChartSeries firstSeries = chart.getChartData().getSeries().get_Item(0);
ITrendline exponentialTrendline = firstSeries.getTrendLines().add(TrendlineType.Exponential);
exponentialTrendline.setDisplayEquation(false);
exponentialTrendline.setDisplayRSquaredValue(false);
ITrendline linearTrendline = firstSeries.getTrendLines().add(TrendlineType.Linear);
linearTrendline.getFormat().getLine().getFillFormat().setFillType(FillType.Solid);
linearTrendline.getFormat().getLine().getFillFormat().getSolidFillColor().setColor(Color.RED);
IChartSeries secondSeries = chart.getChartData().getSeries().get_Item(1);
ITrendline logarithmicTrendline = secondSeries.getTrendLines().add(TrendlineType.Logarithmic);
logarithmicTrendline.addTextFrameForOverriding("New log trend line");
ITrendline movingAverageTrendline = secondSeries.getTrendLines().add(TrendlineType.MovingAverage);
movingAverageTrendline.setPeriod((byte) 3);
movingAverageTrendline.setTrendlineName("New TrendLine Name");
IChartSeries thirdSeries = chart.getChartData().getSeries().get_Item(2);
ITrendline polynomialTrendline = thirdSeries.getTrendLines().add(TrendlineType.Polynomial);
polynomialTrendline.setForward(1);
polynomialTrendline.setOrder((byte) 3);
ITrendline powerTrendline = thirdSeries.getTrendLines().add(TrendlineType.Power);
powerTrendline.setBackward(1);
presentation.save("ChartTrendLines.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Stel een trendlijnintercept in
Gebruik setIntercept om de Y‑waarde van een trendlijn vast te zetten bij X = 0. Deze instelling wordt ondersteund voor lineaire, exponentiële en polynomiale trendlijnen.
Bijvoorbeeld, een productiekostmodel kan moeten starten met bekende vaste kosten van 100, zelfs wanneer metingen bij niet‑nul productievolumes een andere basislijn suggereren. Voor een lineaire trendlijn resulteert het vastzetten van het intercept in de vergelijking y = ax + b naar b = 100; de helling wordt dan aangepast aan de gegevens onder die voorwaarde. Het verplaatst niet simpelweg een reeds aangepaste lijn. Instellingen voor het kruisen van assen bepalen waar de diagramassen elkaar ontmoeten, niet de coëfficiënten van de aangepaste trendlijn.
Het volgende voorbeeld maakt een spreidings‑ (XY) diagram met productievolumes van 1 tot 4 en kosten van 170, 200, 230 en 260. Het slaat het diagram op met het standaard automatisch berekende intercept, zet het intercept op 100, en slaat een tweede PPTX‑bestand op. De twee bestanden verschillen alleen in de intercept‑instelling. De trendlijn toont zijn vergelijking en strekt zich terug uit tot X = 0.
import com.aspose.slides.*;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
IChart chart = slide.getShapes().addChart(ChartType.ScatterWithMarkers, 20, 20, 480, 210);
chart.setLegend(false);
chart.getChartData().getSeries().clear();
chart.getChartData().getCategories().clear();
IChartDataWorkbook workbook = chart.getChartData().getChartDataWorkbook();
workbook.clear(0);
IChartDataCell nameCell = workbook.getCell(0, 0, 1, "Production cost");
IChartSeries series = chart.getChartData().getSeries().add(nameCell, ChartType.ScatterWithMarkers);
double[] costs = { 170, 200, 230, 260 };
for (int i = 0; i < costs.length; i++) {
IChartDataCell xCell = workbook.getCell(0, i + 1, 0, i + 1);
IChartDataCell yCell = workbook.getCell(0, i + 1, 1, costs[i]);
series.getDataPoints().addDataPointForScatterSeries(xCell, yCell);
}
ITrendline trendline = series.getTrendLines().add(TrendlineType.Linear);
trendline.setDisplayEquation(true);
trendline.setBackward(1);
presentation.save("AutomaticIntercept.pptx", SaveFormat.Pptx);
trendline.setIntercept(100);
presentation.save("FixedIntercept.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Met automatische berekening leveren deze gegevens y = 30x + 140. Het instellen van het intercept op 100 levert ongeveer y = 43.33x + 100: de aangepaste waarde bij nul komt overeen met de bekende basislijn, terwijl de lijn niet langer door elk gegevenspunt gaat.
| Automatisch intercept | Vast intercept van 100 |
|---|---|
![]() |
![]() |
Beide afbeeldingen gebruiken dezelfde gegevens en as‑schaal. De trendlijnen zijn teruggestrekt tot X = 0 om hun intercepten te tonen.
Standaard geeft getIntercept Double.NaN terug, wat een niet‑gespecificeerd intercept aangeeft in plaats van nul. Het intercept wordt dan automatisch berekend op basis van de gegevens.
Een aangepaste lijn toevoegen
Een aangepaste lijn is een vorm die over het diagram wordt getekend in plaats van een trendlijn die wordt berekend uit reeksengegevens. Dit voorbeeld gebruikt IShapeCollection.addAutoShape om een horizontale lijn toe te voegen aan de dia boven het diagram. De positie van de lijn wordt opgegeven in dia‑coördinaten, gemeten in points, zodat deze begint bij de linkerrand van het diagram en halverwege het diagram zit. De breedte komt overeen met de breedte van het diagram. De getLineFormat geeft de lijn een egale rode kleur.
import com.aspose.slides.*;
import java.awt.Color;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
IChart chart = slide.getShapes().addChart(ChartType.ClusteredColumn, 100, 100, 500, 400);
IAutoShape line = slide.getShapes().addAutoShape(ShapeType.Line, chart.getX(), chart.getY() + chart.getHeight() / 2, chart.getWidth(), 0);
line.getLineFormat().getFillFormat().setFillType(FillType.Solid);
line.getLineFormat().getFillFormat().getSolidFillColor().setColor(Color.RED);
presentation.save("AddCustomLines.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
FAQ
Wat betekenen ‘forward’ en ‘backward’ voor een trendlijn?
Dit zijn de lengtes van de trendlijn die respectievelijk voortwaarts en achterwaarts worden geprojecteerd: voor spreidings‑ (XY) diagrammen — in as‑eenheden; voor niet‑spreidingsdiagrammen — in aantal categorieën. Alleen niet‑negatieve waarden zijn toegestaan.
Wordt de trendlijn behouden bij het exporteren van de presentatie naar PDF of SVG, of bij het renderen van een dia naar een afbeelding?
Ja. Aspose.Slides converteert presentaties naar PDF of SVG en rendert diagrammen naar afbeeldingen; trendlijnen, als onderdeel van het diagram, blijven behouden tijdens deze bewerkingen. Er is ook een methode beschikbaar om een afbeelding van het diagram zelf te exporteren.

