Trendvonalak hozzáadása a prezentáció diagramokhoz Pythonban

Áttekintés

Ez a cikk elmagyarázza, hogyan lehet trendvonalakat hozzáadni a prezentáció diagramokhoz az Aspose.Slides használatával. Bemutatja, hogyan hozhatunk létre diagramot, hogyan adhatunk trendvonalakat a diagram sorozataihoz, és hogyan dolgozhatunk többféle trendvonal típussal, köztük exponenciális, lineáris, logaritmikus, mozgó átlag, polinomiális és hatvány.

Leírja továbbá, hogyan adhatunk egy egyéni vonalat a diagramhoz egy vonal alakzat beillesztésével, és egy rövid GYIK-ot is tartalmaz a trendvonal előre és hátra vetítési értékeiről, valamint arról, hogy a trendvonalak megmaradnak-e a PDF vagy SVG formátumba exportálás során, illetve a diagramok képként történő megjelenítésekor.

Trendvonal hozzáadása

Használja a TrendlineCollection.add metódust trendvonal hozzáadásához egy diagram sorozatához, a típusának kiválasztásához a TrendlineType segítségével. A példa egy klaszterelt oszlopdiagramot hoz létre alapértelmezett adatokkal, és minden három sorozatához két trendvonalat ad hozzá.

Az exponenciális trendvonal elrejti az egyenletét és az R-négyzet értékét a display_equation és a display_r_squared_value segítségével, míg a lineáris trendvonal piros. A logaritmikus trendvonal a add_text_frame_for_overriding‑t használja egy egyéni felirathoz. A mozgó átlag egy három adatpontból álló period használ, és egy egyéni trendline_name.

A polinomiális trendvonal order három, és egy kategóriát előre nyújt a forward segítségével. A hatvány trendvonal egy kategóriát hátra nyújt a backward használatával.

import aspose.slides as slides
import aspose.slides.charts as charts

with slides.Presentation() as presentation:
    slide = presentation.slides[0]

    chart = slide.shapes.add_chart(charts.ChartType.CLUSTERED_COLUMN, 20, 20, 500, 400)

    first_series = chart.chart_data.series[0]

    exponential_trendline = first_series.trend_lines.add(charts.TrendlineType.EXPONENTIAL)
    exponential_trendline.display_equation = False
    exponential_trendline.display_r_squared_value = False

    linear_trendline = first_series.trend_lines.add(charts.TrendlineType.LINEAR)
    linear_trendline.format.line.fill_format.fill_type = slides.FillType.SOLID
    linear_trendline.format.line.fill_format.solid_fill_color.r = 255
    linear_trendline.format.line.fill_format.solid_fill_color.g = 0
    linear_trendline.format.line.fill_format.solid_fill_color.b = 0

    second_series = chart.chart_data.series[1]

    logarithmic_trendline = second_series.trend_lines.add(charts.TrendlineType.LOGARITHMIC)
    logarithmic_trendline.add_text_frame_for_overriding("New log trend line")

    moving_average_trendline = second_series.trend_lines.add(charts.TrendlineType.MOVING_AVERAGE)
    moving_average_trendline.period = 3
    moving_average_trendline.trendline_name = "New TrendLine Name"

    third_series = chart.chart_data.series[2]

    polynomial_trendline = third_series.trend_lines.add(charts.TrendlineType.POLYNOMIAL)
    polynomial_trendline.forward = 1
    polynomial_trendline.order = 3

    power_trendline = third_series.trend_lines.add(charts.TrendlineType.POWER)
    power_trendline.backward = 1

    presentation.save("ChartTrendLines.pptx", slides.export.SaveFormat.PPTX)

Trendvonal metszéspont beállítása

Használja a intercept metódust a trendvonal Y értékének X = 0‑nál rögzítéséhez. Ez a beállítás támogatott lineáris, exponenciális és polinomiális trendvonalak esetén.

Például egy termelési költség modellnek 100 ismert fix költségnél kell kezdődnie, még akkor is, ha a nem nulla termelési mennyiségeknél végzett mérések más kiindulási pontot jelölnek. Egy 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átozás mellett lesz illesztve az adatokra. Ez nem egyszerűen mozgat egy már illesztett vonalat. A tengelykeresztelés beállítások irányítják, ahol a diagram tengelyei találkoznak, nem pedig a trendvonal illesztett együtthatóit.

Az alábbi példa egy szórt (XY) diagramot hoz létre, amely 1‑4 közötti termelési mennyiségeket és 170, 200, 230 és 260 költségeket tartalmaz. A diagramot az alapértelmezett automatikus metszésponttal menti, beállítja a metszéspontot 100‑ra, és egy második PPTX‑et ment. 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 aspose.slides as slides
import aspose.slides.charts as charts

with slides.Presentation() as presentation:
    slide = presentation.slides[0]

    chart = slide.shapes.add_chart(charts.ChartType.SCATTER_WITH_MARKERS, 20, 20, 480, 210)
    chart.has_legend = False

    chart.chart_data.series.clear()
    chart.chart_data.categories.clear()

    workbook = chart.chart_data.chart_data_workbook
    workbook.clear(0)

    name_cell = workbook.get_cell(0, 0, 1, "Production cost")
    series = chart.chart_data.series.add(name_cell, charts.ChartType.SCATTER_WITH_MARKERS)
    costs = [170, 200, 230, 260]

    for i, cost in enumerate(costs):
        x_cell = workbook.get_cell(0, i + 1, 0, i + 1)
        y_cell = workbook.get_cell(0, i + 1, 1, cost)
        series.data_points.add_data_point_for_scatter_series(x_cell, y_cell)

    trendline = series.trend_lines.add(charts.TrendlineType.LINEAR)
    trendline.display_equation = True
    trendline.backward = 1

    presentation.save("AutomaticIntercept.pptx", slides.export.SaveFormat.PPTX)

    trendline.intercept = 100
    presentation.save("FixedIntercept.pptx", slides.export.SaveFormat.PPTX)

Automatikus számítással ezek az adatok y = 30x + 140‑at eredményeznek. Ha a metszéspontot 100‑ra állítjuk, akkor megközelítőleg y = 43.33x + 100 jön létre: a nulla helyen illesztett érték egyezik a ismert kiindulási ponttal, míg a vonal már nem halad át minden adatponton.

Automatikus metszéspont Fix metszéspont 100
Lineáris trendvonal automatikusan számított metszésponttal 140 Lineáris trendvonal 100-as fix metszésponttal

Mindkét kép ugyanazt az adatot és tengely skálát használja. A trendvonalak visszanyúlnak X = 0‑ig, hogy megmutassák a metszéspontjaikat.

Alapértelmezés szerint a tulajdonság float("nan") értéket tartalmaz, ami egy nem meghatározott metszéspontot jelöl, nem nullát. A metszéspont ezután automatikusan lesz kiszámítva az adatokból.

Egyéni vonal hozzáadása

Egy egyéni vonal egy alakzat, amely a diagram felett van megrajzolva, nem pedig a sorozat adatból számított trendvonal. Ez a példa a ShapeCollection.add_auto_shape metódust használja egy vízszintes vonal hozzáadásához a diára a diagram fölött. A vonal pozíciója a diának koordinátáiban, pontokban megadott, ezért a diagram bal szélénél kezdődik és a diagram közepénél áll. Szélessége megegyezik a diagram szélességével. A line_format a vonalat egy szilárd piros színnel látja el.

import aspose.slides as slides
import aspose.slides.charts as charts

with slides.Presentation() as presentation:
    slide = presentation.slides[0]

    chart = slide.shapes.add_chart(charts.ChartType.CLUSTERED_COLUMN, 100, 100, 500, 400)

    line = slide.shapes.add_auto_shape(slides.ShapeType.LINE, chart.x, chart.y + chart.height / 2, chart.width, 0)
    line.line_format.fill_format.fill_type = slides.FillType.SOLID
    line.line_format.fill_format.solid_fill_color.r = 255
    line.line_format.fill_format.solid_fill_color.g = 0
    line.line_format.fill_format.solid_fill_color.b = 0

    presentation.save("AddCustomLines.pptx", slides.export.SaveFormat.PPTX)

GYIK

Mit jelent a ‘forward’ és a ‘backward’ egy trendvonalnál?

Az előre vagy hátra vetített trendvonal hosszát jelentik: szórt (XY) diagramok esetén – tengelyegységekben; nem szórt diagramok esetén – kategóriák számban. Csak nem negatív értékek engedélyezettek.

Megmarad a trendvonal a prezentáció PDF vagy SVG formátumba exportálásakor, illetve a dia képként történő renderelésekor?

Igen. Az Aspose.Slides prezentációkat PDF vagy SVG formátumba konvertál, és diagramokat képekbe renderel; a trendvonalak, mint a diagram részei, megmaradnak ezek során. Egy metódus is elérhető a diagram képének exportálásához.