เพิ่มเส้นแนวโน้มให้กับแผนภูมิการนำเสนอใน Android

ภาพรวม

บทความนี้อธิบายวิธีการเพิ่มเส้นแนวโน้มลงในแผนภูมิการนำเสนอโดยใช้ Aspose.Slides ซึ่งจะแสดงวิธีสร้างแผนภูมิ, การเพิ่มเส้นแนวโน้มให้กับชุดข้อมูลของแผนภูมิ, และการทำงานกับประเภทเส้นแนวโน้มหลายประเภท รวมถึงเอ็กซ์โพเนนเชียล, เชิงเส้น, ลอการิทึม, ค่าเฉลี่ยเคลื่อนที่, พหุนาม, และพาวเวอร์

นอกจากนี้ยังอธิบายวิธีการเพิ่มเส้นกำหนดเองลงในแผนภูมิโดยการแทรกรูปทรงเส้น และรวม FAQ สั้นเกี่ยวกับค่าการฉายเส้นแนวโน้มไปข้างหน้าและถอยหลังและว่าการส่งออกเส้นแนวโน้มจะถูกเก็บไว้หรือไม่เมื่อส่งออกเป็น PDF หรือ SVG หรือเมื่อเรนเดอร์แผนภูมิเป็นภาพ

เพิ่มเส้นแนวโน้ม

ใช้ ITrendlineCollection.add เพื่อเพิ่มเส้นแนวโน้มให้กับชุดข้อมูลของแผนภูมิ โดยเลือกประเภทด้วย TrendlineType ตัวอย่างสร้างแผนภูมิคอลัมน์แบบกลุ่มพร้อมข้อมูลเริ่มต้นและเพิ่มเส้นแนวโน้มสองเส้นให้กับแต่ละชุดข้อมูลจำนวนสามชุด

เส้นแนวโน้มเชิงเอ็กซ์โพเนนเชียลซ่อนสมการและค่า R-squared ด้วย setDisplayEquation และ setDisplayRSquaredValue ในขณะที่เส้นแนวโน้มเชิงเส้นเป็นสีแดง เส้นแนวโน้มลอการิทึมใช้ addTextFrameForOverriding สำหรับป้ายกำกับแบบกำหนดเอง ค่าเฉลี่ยเคลื่อนที่ใช้ setPeriod ที่สามจุดข้อมูลและใช้ setTrendlineName ที่กำหนดเอง

เส้นแนวโน้มพหุนามมี setOrder ที่สามและขยายหนึ่งหมวดหมู่ไปข้างหน้าด้วย setForward. เส้นแนวโน้มพาวเวอร์ขยายหนึ่งหมวดหมู่ย้อนกลับด้วย setBackward.

import com.aspose.slides.*;
import android.graphics.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();
}

ตั้งค่าตัดของเส้นแนวโน้ม

ใช้ setIntercept เพื่อกำหนดค่าของ Y ของเส้นแนวโน้มที่ X = 0 การตั้งค่านี้รองรับสำหรับเส้นแนวโน้มเชิงเส้น, เชิงเอ็กซ์โพเนนเชียล และพหุนาม

ตัวอย่างเช่น โมเดลต้นทุนการผลิตอาจต้องเริ่มต้นที่ต้นทุนคงที่ที่รู้จักคือ 100 แม้ว่าเมื่อวัดที่ปริมาณการผลิตไม่เป็นศูนย์จะบ่งชี้ฐานข้อมูลที่ต่างออกไป สำหรับเส้นแนวโน้มเชิงเส้น การกำหนดค่าตัดทำให้สมการ y = ax + b มี b = 100; ความชันจะถูกฟิตกับข้อมูลภายใต้เงื่อนไขนั้น ซึ่งไม่ใช่การย้ายเส้นที่ฟิตแล้ว การตั้งค่าการตัดแกนควบคุมตำแหน่งที่แกนของแผนภูมิกัน ไม่ใช่ค่าสัมประสิทธิ์ของเส้นแนวโน้มที่ฟิต

ตัวอย่างต่อไปนี้สร้างแผนภูมิแบบกระจาย (XY) พร้อมปริมาณการผลิตตั้งแต่ 1 ถึง 4 และต้นทุน 170, 200, 230, และ 260 ซึ่งบันทึกแผนภูมิด้วยค่าตัดอัตโนมัติเริ่มต้น, ตั้งค่าตัดเป็น 100, และบันทึกเป็น PPTX ที่สอง ไฟล์ทั้งสองแตกต่างกันเฉพาะค่าตัด เส้นแนวโน้มจะแสดงสมการและขยายกลับไปที่ 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();
}

ด้วยการคำนวณอัตโนมัติ ข้อมูลเหล่านี้ให้ผลลัพธ์ y = 30x + 140 การตั้งค่าตัดเป็น 100 แทนจะให้ผลประมาณ y = 43.33x + 100: ค่าที่ฟิตที่ศูนย์ตรงกับฐานข้อมูลที่รู้จัก แต่เส้นจะไม่ผ่านทุกจุดข้อมูลอีกต่อไป

ค่าตัดอัตโนมัติ ค่าตัดคงที่ 100
เส้นแนวโน้มเชิงเส้นที่คำนวณค่าตัดอัตโนมัติ 140 เส้นแนวโน้มเชิงเส้นที่มีค่าตัดคงที่ 100

ภาพทั้งสองใช้ข้อมูลและสเกลแกนเดียวกัน เส้นแนวโน้มจะถูกขยายกลับไปที่ X = 0 เพื่อแสดงค่าตัดของมัน

โดยค่าเริ่มต้น getIntercept จะคืนค่า Double.NaN ซึ่งหมายถึงค่าตัดที่ไม่ได้ระบุ แทนที่จะเป็นศูนย์ จากนั้นค่าตัดจะถูกคำนวณอัตโนมัติจากข้อมูล

เพิ่มเส้นกำหนดเอง

เส้นกำหนดเองเป็นรูปทรงที่วาดบนแผนภูมิแทนที่จะเป็นเส้นแนวโน้มที่คำนวณจากข้อมูลชุด ตัวอย่างนี้ใช้ IShapeCollection.addAutoShape เพื่อเพิ่มเส้นแนวนอนลงในสไลด์เหนือแผนภูมิ ตำแหน่งของเส้นระบุในพิกัดของสไลด์ หน่วยเป็นจุด ดังนั้นจึงเริ่มที่ขอบซ้ายของแผนภูมิและอยู่ครึ่งหนึ่งของความสูงแผนภูมิ ความกว้างของเส้นเท่ากับความกว้างของแผนภูมิ getLineFormat ให้เส้นเป็นสีแดงทึบ

import com.aspose.slides.*;
import android.graphics.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();
}

คำถามที่พบบ่อย

‘forward’ และ ‘backward’ หมายถึงอะไรสำหรับเส้นแนวโน้ม?

พวกมันคือความยาวของเส้นแนวโน้มที่ฉายไปข้างหน้า/ถอยหลัง: สำหรับแผนภูมิแบบกระจาย (XY) — เป็นหน่วยแกน; สำหรับแผนภูมิที่ไม่ใช่แบบกระจาย — เป็นจำนวนหมวดหมู่ จ่ามากค่าต้องเป็นจำนวนที่ไม่เป็นลบเท่านั้น

เส้นแนวโน้มจะถูกเก็บไว้เมื่อต้องส่งออกการนำเสนอเป็น PDF หรือ SVG หรือเมื่อเรนเดอร์สไลด์เป็นภาพหรือไม่?

ใช่ Aspose.Slides จะแปลงการนำเสนอเป็น PDF หรือ SVG และเรนเดอร์แผนภูมิเป็นภาพ; เส้นแนวโน้มในฐานะส่วนหนึ่งของแผนภูมิจึงถูกเก็บไว้ระหว่างการทำงานเหล่านี้ นอกจากนี้ยังมีเมธอดให้ ส่งออกภาพของแผนภูมิ ด้วย