เพิ่มเส้นแนวโน้มในแผนภูมินำเสนอด้วย Python
ภาพรวม
บทความนี้อธิบายวิธีการเพิ่มเส้นแนวโน้มลงในแผนภูมินำเสนอโดยใช้ Aspose.Slides โดยจะแสดงวิธีสร้างแผนภูมิ, เพิ่มเส้นแนวโน้มให้กับชุดข้อมูลของแผนภูมิ, และทำงานกับประเภทเส้นแนวโน้มต่าง ๆ ได้แก่ เชิงเอ็กซ์โพเนนเชียล, เชิงเส้น, ลอการิทึม, ค่าเฉลี่ยเคลื่อนที่, พหุนาม, และพาวเวอร์
นอกจากนี้ยังอธิบายวิธีเพิ่มเส้นแบบกำหนดเองลงในแผนภูมิโดยการแทรกรูปทรงเส้น และรวมคำถามที่พบบ่อยสั้น ๆ เกี่ยวกับค่าการฉายเส้นแนวโน้มไปข้างหน้าและถอยหลังว่าเป็นอย่างไร และเส้นแนวโน้มจะคงอยู่หรือไม่เมื่อนำเสนอไปยัง PDF หรือ SVG หรือเมื่อตัวแปลงแผนภูมิเป็นรูปภาพ
เพิ่มเส้นแนวโน้ม
ใช้ TrendlineCollection.add เพื่อเพิ่มเส้นแนวโน้มให้กับชุดข้อมูลของแผนภูมิ โดยเลือกประเภทผ่าน TrendlineType. ตัวอย่างสร้างแผนภูมิเชิงคอลัมน์แบบกลุ่มโดยใช้ข้อมูลค่าเริ่มต้นและเพิ่มเส้นแนวโน้มสองเส้นให้กับแต่ละชุดข้อมูลจำนวนสามชุด
เส้นแนวโน้มเชิงเอ็กซ์โพเนนเชียลซ่อนสมการและค่า R‑squared ผ่าน setDisplayEquation และ setDisplayRSquaredValue ขณะที่เส้นแนวโน้มเชิงเส้นเป็นสีแดง เส้นแนวโน้มเชิงลอการิทึมใช้ addTextFrameForOverriding เพื่อกำหนดป้ายกำกับแบบกำหนดเอง ค่าเฉลี่ยเคลื่อนที่ใช้ setPeriod เป็นสามจุดข้อมูลและกำหนดชื่อผ่าน setTrendlineName
เส้นแนวโน้มพหุนามมีลำดับเป็นสามกำหนดโดย setOrder และขยายหนึ่งหมวดหมู่ต่อไปข้างหน้าโดย setForward เส้นแนวโน้มพาวเวอร์ขยายหนึ่งหมวดหมู่ถอยหลังโดย setBackward
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import ChartType, FillType, Presentation, SaveFormat, TrendlineType
from java.awt import Color
presentation = Presentation()
try:
slide = presentation.getSlides().get_Item(0)
chart = slide.getShapes().addChart(ChartType.ClusteredColumn, 20, 20, 500, 400)
first_series = chart.getChartData().getSeries().get_Item(0)
exponential_trendline = first_series.getTrendLines().add(TrendlineType.Exponential)
exponential_trendline.setDisplayEquation(False)
exponential_trendline.setDisplayRSquaredValue(False)
linear_trendline = first_series.getTrendLines().add(TrendlineType.Linear)
linear_trendline.getFormat().getLine().getFillFormat().setFillType(FillType.Solid)
linear_trendline.getFormat().getLine().getFillFormat().getSolidFillColor().setColor(Color.RED)
second_series = chart.getChartData().getSeries().get_Item(1)
logarithmic_trendline = second_series.getTrendLines().add(TrendlineType.Logarithmic)
logarithmic_trendline.addTextFrameForOverriding("New log trend line")
moving_average_trendline = second_series.getTrendLines().add(TrendlineType.MovingAverage)
moving_average_trendline.setPeriod(jpype.JByte(3))
moving_average_trendline.setTrendlineName("New TrendLine Name")
third_series = chart.getChartData().getSeries().get_Item(2)
polynomial_trendline = third_series.getTrendLines().add(TrendlineType.Polynomial)
polynomial_trendline.setForward(1)
polynomial_trendline.setOrder(jpype.JByte(3))
power_trendline = third_series.getTrendLines().add(TrendlineType.Power)
power_trendline.setBackward(1)
presentation.save("ChartTrendLines.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
กำหนดจุดตัดแกนของเส้นแนวโน้ม
ใช้ setIntercept เพื่อกำหนดค่า Y ของเส้นแนวโน้มเมื่อ X = 0 การตั้งค่านี้สนับสนุนสำหรับเส้นแนวโน้มเชิงเส้น, เชิงเอ็กซ์โพเนนเชียล, และพหุนาม
ตัวอย่างเช่น โมเดลต้นทุนการผลิตอาจต้องเริ่มต้นที่ค่าใช้จ่ายคงที่ที่ทราบไว้ 100 แม้ว่าข้อมูลที่วัดที่ปริมาณการผลิตที่ไม่เป็นศูนย์จะบ่งบอกฐานข้อมูลที่ต่างออกไป สำหรับเส้นแนวโน้มเชิงเส้น การกำหนดจุดตัดทำให้สมการ y = ax + b กลายเป็น b = 100; ความชันจะถูกฟิตตามข้อมูลภายใต้เงื่อนไขนั้น ไม่ได้เพียงแค่ย้ายเส้นที่ฟิตแล้วตั้งค่า การตั้งค่าการตัดแกนจะกำหนดตำแหน่งที่แกนของแผนภูมิกัน, ไม่ใช่ค่าสัมประสิทธิ์ของเส้นแนวโน้มที่ฟิตแล้ว
ตัวอย่างต่อไปสร้างแผนภูมิกระจาย (XY) โดยใช้ปริมาณการผลิตตั้งแต่ 1 ถึง 4 และต้นทุน 170, 200, 230, และ 260 บันทึกแผนภูมิด้วยการคำนวณจุดตัดอัตโนมัติเริ่มต้น, จากนั้นกำหนดจุดตัดเป็น 100 และบันทึกเป็นไฟล์ PPTX ที่สอง ทั้งสองไฟล์ต่างกันเฉพาะค่า การตั้งค่าจุดตัด จุดตัดเส้นแนวโน้มจะแสดงสมการและขยายกลับไปที่ X = 0
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import ChartType, Presentation, SaveFormat, TrendlineType
presentation = Presentation()
try:
slide = presentation.getSlides().get_Item(0)
chart = slide.getShapes().addChart(ChartType.ScatterWithMarkers, 20, 20, 480, 210)
chart.setLegend(False)
chart.getChartData().getSeries().clear()
chart.getChartData().getCategories().clear()
workbook = chart.getChartData().getChartDataWorkbook()
workbook.clear(0)
name_cell = workbook.getCell(0, 0, 1, "Production cost")
series = chart.getChartData().getSeries().add(name_cell, ChartType.ScatterWithMarkers)
costs = [170, 200, 230, 260]
for i in range(len(costs)):
x_cell = workbook.getCell(0, i + 1, 0, i + 1)
y_cell = workbook.getCell(0, i + 1, 1, costs[i])
series.getDataPoints().addDataPointForScatterSeries(x_cell, y_cell)
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()
เมื่อคำนวณอัตโนมัติ ข้อมูลเหล่านี้ให้ผลลัพธ์ y = 30x + 140 การตั้งค่าจุดตัดเป็น 100 แทนจะให้ผลลัพธ์ประมาณ y = 43.33x + 100: ค่าที่ฟิตที่ศูนย์ตรงกับฐานข้อมูลที่ทราบไว้, ในขณะที่เส้นจะไม่ผ่านทุกจุดข้อมูลอีกต่อไป
| การตัดแกนอัตโนมัติ | การตัดแกนที่ตั้งค่าเป็น 100 |
|---|---|
![]() |
![]() |
ภาพทั้งสองใช้ข้อมูลและสเกลแกนเดียวกัน เส้นแนวโน้มถูกขยายกลับไปที่ X = 0 เพื่อแสดงจุดตัดของมัน
โดยค่าเริ่มต้น, getIntercept จะคืนค่า NaN ซึ่งหมายถึงจุดตัดที่ไม่ได้ระบุ ไม่ใช่ศูนย์ จากนั้นจุดตัดจะถูกคำนวณโดยอัตโนมัติจากข้อมูล
เพิ่มเส้นที่กำหนดเอง
เส้นที่กำหนดเองเป็นรูปทรงที่วาดเหนือแผนภูมิแทนที่จะเป็นเส้นแนวโน้มที่คำนวณจากข้อมูลชุดข้อมูล ตัวอย่างนี้ใช้ ShapeCollection.addAutoShape เพื่อเพิ่มเส้นแนวนอนบนสไลด์เหนือแผนภูมิ ตำแหน่งของเส้นระบุด้วยพิกัดของสไลด์เป็นจุด, ดังนั้นเริ่มจากขอบซ้ายของแผนภูมิและอยู่กึ่งกลางความสูงของแผนภูมิ ความกว้างของเส้นตรงกับความกว้างของแผนภูมิ วิธี getLineFormat ให้เข้าถึงการจัดรูปแบบเส้นเพื่อกำหนดสีแดงทึบ
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import ChartType, FillType, Presentation, SaveFormat, ShapeType
from java.awt import Color
presentation = Presentation()
try:
slide = presentation.getSlides().get_Item(0)
chart = slide.getShapes().addChart(ChartType.ClusteredColumn, 100, 100, 500, 400)
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()
คำถามที่พบบ่อย
‘forward’ และ ‘backward’ มีความหมายอย่างไรสำหรับเส้นแนวโน้ม?
เป็นความยาวของเส้นแนวโน้มที่ฉายไปข้างหน้า/ถอยหลัง: สำหรับแผนภูมิกระจาย (XY) — หน่วยแกน; สำหรับแผนภูมิที่ไม่ใช่กระจาย — จำนวนหมวดหมู่ ค่าที่รับได้ต้องเป็นค่าที่ไม่เป็นลบเท่านั้น
เส้นแนวโน้มจะคงอยู่หรือไม่เมื่อส่งออกงานนำเสนอเป็น PDF หรือ SVG หรือเมื่อแปลงสไลด์เป็นรูปภาพ?
ใช่ Aspose.Slides จะแปลงงานนำเสนอเป็น PDF หรือ SVG และเรนเดอร์แผนภูมิเป็นรูปภาพ; เส้นแนวโน้มในฐานะส่วนหนึ่งของแผนภูมิจะถูกเก็บไว้ในกระบวนการเหล่านี้ อีกทั้งยังมีเมธอดสำหรับ export an image of the chart ด้วย

