Lägg till trendlinjer i presentationsdiagram i Java
Översikt
Denna artikel förklarar hur du lägger till trendlinjer i presentationsdiagram med hjälp av Aspose.Slides. Den visar hur du skapar ett diagram, lägger till trendlinjer i diagramserier och arbetar med flera typer av trendlinjer, inklusive exponentiell, linjär, logaritmisk, glidande medelvärde, polynom och potens.
Den beskriver också hur du lägger till en anpassad linje i ett diagram genom att infoga en linjeshape, och innehåller en kort FAQ om värden för framåt‑ och bakåtriktad projektion av trendlinjer samt om trendlinjer bevaras vid export till PDF eller SVG och vid rendering av diagram som bilder.
Lägg till en trendlinje
Använd ITrendlineCollection.add för att lägga till en trendlinje i en diagramserie, välj dess typ med TrendlineType. Exemplet skapar ett grupperat stapeldiagram med standarddata och lägger till två trendlinjer för var och en av dess tre serier.
Den exponentiella trendlinjen döljer sin ekvation och R‑kvadrerade värde via setDisplayEquation och setDisplayRSquaredValue, medan den linjära trendlinjen är röd. Den logaritmiska trendlinjen använder addTextFrameForOverriding för en anpassad etikett. Glidande medelvärde använder en setPeriod på tre datapunkter och en anpassad setTrendlineName.
Den polynomiska trendlinjen har en setOrder på tre och sträcker sig en kategori framåt genom setForward. Potens‑trendlinjen sträcker sig en kategori bakåt genom 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();
}
Ställ in ett intercept för trendlinjen
Använd setIntercept för att fixera en trendlinjes Y‑värde vid X = 0. Denna inställning stöds för linjära, exponentiella och polynomiska trendlinjer.
Till exempel kan en produktionskostnadsmodell behöva börja med kända fasta kostnader på 100, även när mätningar vid icke‑noll produktionsvolymer tyder på ett annat baslinje. För en linjär trendlinje begränsar fixering av interceptet ekvationen y = ax + b till b = 100; lutningen anpassas till data under den begränsningen. Det flyttar inte bara en redan anpassad linje. Inställningar för axelöverskridning styr var diagramaxlarna möts, inte koefficienterna för den anpassade trendlinjen.
Följande exempel skapar ett spridnings‑(XY‑)diagram med produktionsvolymer från 1 till 4 och kostnader på 170, 200, 230 och 260. Det sparar diagrammet med standardautomatiskt intercept, sätter interceptet till 100 och sparar en andra PPTX. De två filerna skiljer sig endast i interceptinställningen. Trendlinjen visar sin ekvation och sträcker sig tillbaka till 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();
}
Med automatisk beräkning ger dessa data y = 30x + 140. Om interceptet sätts till 100 ger det ungefär y = 43.33x + 100: det anpassade värdet vid noll matchar den kända baslinjen, medan linjen inte längre går igenom varje datapunkt.
| Automatiskt intercept | Fast intercept på 100 |
|---|---|
![]() |
![]() |
Båda bilderna använder samma data och axelskalor. Trendlinjerna sträcks tillbaka till X = 0 för att visa deras intercept.
Som standard returnerar getIntercept Double.NaN, vilket representerar ett ospecificerat intercept snarare än noll. Interceptet beräknas då automatiskt från data.
Lägg till en anpassad linje
En anpassad linje är en form som ritas över diagrammet snarare än en trendlinje beräknad från serien data. Detta exempel använder IShapeCollection.addAutoShape för att lägga till en horisontell linje på bilden över diagrammet. Linjens position anges i bildkoordinater, mätt i punkter, så den börjar vid diagrammets vänstra kant och sitter halvvägs ner i diagrammet. Dess bredd matchar diagrammets bredd. getLineFormat ger linjen en solid röd färg.
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();
}
Vanliga frågor
Vad betyder ‘framåt’ och ‘bakåt’ för en trendlinje?
De är längderna på trendlinjen som projiceras framåt/bakåt: för spridnings‑(XY‑)diagram – i axelenheter; för icke‑spridningsdiagram – i antal kategorier. Endast icke‑negativa värden är tillåtna.
Kommer trendlinjen att bevaras vid export av presentationen till PDF eller SVG, eller när en bild renderas till en bildfil?
Ja. Aspose.Slides konverterar presentationer till PDF eller SVG och renderar diagram till bilder; trendlinjer, som en del av diagrammet, bevaras under dessa operationer. En metod finns också för att exportera en bild av diagrammet själv.

