Trendvonalak hozzáadása a prezentációs diagramokhoz Java-ban
Áttekintés
Ez a cikk bemutatja, hogyan lehet trendvonalakat hozzáadni bemutató diagramokhoz az Aspose.Slides segítségével. Megmutatja, hogyan hozhat létre diagramot, adhat hozzá trendvonalakat a diagram sorozataihoz, és dolgozhat több trendvonal típussal, többek között exponenciálissal, lineárral, logaritmussal, mozgó átlagszámmal, polinommal és hatványoszal.
Leírja továbbá, hogyan adhat hozzá egy egyéni vonalat a diagramhoz egy vonal alakzat beszúrásával, és egy rövid GYIK-ot tartalmaz a trendvonal előre és hátra kiterjesztési értékekkel kapcsolatban, valamint arról, hogy a trendvonalak megmaradnak-e a PDF vagy SVG exportálásakor és a diagramok képként történő renderelésekor.
Trendvonal hozzáadása
Használja az ITrendlineCollection.add metódust egy trendvonal hozzáadásához a diagram sorozatához, típusát a TrendlineType segítségével választhatja ki. A példában egy csoportos oszlopdiagramot hoz létre alapértelmezett adatokkal, és minden három sorozathoz két trendvonalat ad hozzá.
Az exponenciális trendvonal a setDisplayEquation és a setDisplayRSquaredValue segítségével elrejti az egyenletet és az R-négyzet értéket, míg a lineáris trendvonal piros. A logaritmikus trendvonal a addTextFrameForOverriding metódust használja egy egyéni címkehez. A mozgó átlag egy három adatpontot tartalmazó setPeriod értéket és egy egyéni setTrendlineName metódust használ.
A polinomiális trendvonal setOrder értéke három, és egy kategóriát nyújt előre a setForward segítségével. A hatványos trendvonal egy kategóriát nyújt vissza a setBackward segítségével.
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();
}
Trendvonal metszéspont beállítása
Használja a setIntercept metódust a trendvonal Y értékének rögzítéséhez X = 0-nál. Ez a beállítás támogatott lineáris, exponenciális és polinomiális trendvonalaknál.
Például egy termelési költségmodellnek 100 ismert állandó költségnél kell indulnia, még akkor is, ha a nem nulla termelési mennyiségeknél mért értékek más kiindulási alapot sugallnak. Lineáris trendvonal esetén a metszéspont rögzítése a y = ax + b egyenletet b = 100-ra korlátozza; a meredekség a korláttal együtt illeszkedik az adatokhoz. Ez nem csak egy már illesztett vonalat helyez át. A tengelykereszteződés beállítások szabályozzák, hol találkoznak a diagram tengelyei, nem a trendvonal együtthatóit.
Az alábbi példában egy szórt (XY) diagramot hoz létre 1-től 4-ig terjedő termelési mennyiségekkel és 170, 200, 230 és 260 költségekkel. A diagramot az alapértelmezett automatikus metszésponttal menti, beállítja a metszéspontot 100-ra, és elment egy második PPTX-et. A két fájl csak a metszéspont beállításában különbözik. A trendvonal megjeleníti az egyenletét és visszanyúlik X = 0-ig.
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();
}
Automatikus számítás esetén ezek az adatok a y = 30x + 140 egyenletet adják. A metszéspont 100-ra állítása helyette körülbelül y = 43.33x + 100-at eredményez: a nulla pontban illesztett érték megegyezik a ismert kiindulási alappal, míg a vonal már nem halad minden adatponton.
| Automatikus metszéspont | 100-ra rögzített metszéspont |
|---|---|
![]() |
![]() |
Mindkét kép ugyanazokat az adatokat és tengelyskálákat használja. A trendvonalak visszanyúlnak X = 0-ig, hogy megjelenítsék a metszéspontjaikat.
Alapértelmezés szerint a getIntercept Double.NaN értéket ad vissza, ami egy nem meghatározott metszéspontot jelent, nem pedig nullát. A metszéspontot ezután automatikusan számítja ki az adat.
Egyéni vonal hozzáadása
Egy egyéni vonal egy alakzat, amely a diagram fölé van rajzolva, nem pedig a sorozat adatok alapján számolt trendvonal. Ez a példa a IShapeCollection.addAutoShape metódust használja egy vízszintes vonal hozzáadásához a diára a diagram felett. A vonal pozíciója a dia koordinátáiban van meghatározva, pontokban mérve, így a diagram bal szélénél indul, és a diagram felénél helyezkedik el. Szélessége megegyezik a diagram szélességével. A getLineFormat piros szilárd színt ad a vonalnak.
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();
}
GYIK
Mit jelent a ‘forward’ és a ‘backward’ egy trendvonal esetén?
Ezek a trendvonal előre vagy hátra kiterjesztett hossza: szórt (XY) diagramok esetén – a tengely egységeiben; nem szórt diagramok esetén – a kategóriák számában. Csak nem negatív értékek engedélyezettek.
Megmarad a trendvonal a bemutató PDF vagy SVG formátumba exportálásakor, illetve a dia képként történő renderelésekor?
Igen. Az Aspose.Slides a bemutatókat PDF vagy SVG formátumba konvertálja, és a diagramokat képekké rendereli; a trendvonalak, mint a diagram részei, ezeknél a műveleteknél megmaradnak. Egy metódus is elérhető a diagram képének exportálásához.

