C++에서 프레젠테이션 차트에 추세선 추가
개요
이 문서는 Aspose.Slides를 사용하여 프레젠테이션 차트에 추세선을 추가하는 방법을 설명합니다. 차트를 생성하고 차트 시리즈에 추세선을 추가하며, 지수, 선형, 로그, 이동 평균, 다항식 및 거듭제곱 등 여러 추세선 유형을 사용하는 방법을 보여줍니다.
또한 선 모양을 삽입하여 차트에 사용자 정의 선을 추가하는 방법을 설명하고, 앞·뒤 추세선 투영값과 PDF 또는 SVG로 내보낼 때 또는 차트를 이미지로 렌더링할 때 추세선이 유지되는지에 대한 간단한 FAQ를 포함합니다.
추세선 추가
ITrendlineCollection::Add을 사용하여 차트 시리즈에 추세선을 추가하고, TrendlineType으로 유형을 선택합니다. 예제에서는 기본 데이터가 있는 클러스터형 세로 막대 차트를 만들고 각 세 개의 시리즈에 두 개의 추세선을 추가합니다.
지수 추세선은 ITrendline::set_DisplayEquation 및 ITrendline::set_DisplayRSquaredValue를 통해 방정식과 R-제곱 값을 숨기고, 선형 추세선은 빨간색으로 표시됩니다. 로그 추세선은 IOverridableText::AddTextFrameForOverriding을 사용하여 사용자 정의 레이블을 지정합니다. 이동 평균은 ITrendline::set_Period를 사용해 세 데이터 포인트를 평균하고, ITrendline::set_TrendlineName으로 사용자 정의 이름을 설정합니다.
다항식 추세선은 ITrendline::set_Order를 사용해 차수를 세 개로 설정하고, ITrendline::set_Forward를 통해 한 카테고리 앞쪽으로 연장합니다. 거듭제곱 추세선은 ITrendline::set_Backward를 사용해 한 카테고리 뒤쪽으로 연장합니다.
#include <system/shared_ptr.h>
#include <drawing/color.h>
#include <DOM/Presentation.h>
#include <DOM/ISlide.h>
#include <DOM/IShapeCollection.h>
#include <DOM/ILineFormat.h>
#include <DOM/IFillFormat.h>
#include <DOM/IColorFormat.h>
#include <DOM/FillType.h>
#include <DOM/IChart.h>
#include <DOM/Chart/ChartType.h>
#include <DOM/Chart/IChartData.h>
#include <DOM/Chart/IChartSeries.h>
#include <DOM/Chart/IChartSeriesCollection.h>
#include <DOM/Chart/ITrendline.h>
#include <DOM/Chart/ITrendlineCollection.h>
#include <DOM/Chart/TrendlineType.h>
#include <DOM/Chart/IFormat.h>
#include <Export/SaveFormat.h>
using namespace System;
using namespace System::Drawing;
using namespace Aspose::Slides;
using namespace Aspose::Slides::Charts;
using namespace Aspose::Slides::Export;
auto presentation = MakeObject<Presentation>();
auto slide = presentation->get_Slide(0);
auto chart = slide->get_Shapes()->AddChart(ChartType::ClusteredColumn, 20, 20, 500, 400);
auto firstSeries = chart->get_ChartData()->get_Series()->idx_get(0);
auto exponentialTrendline = firstSeries->get_TrendLines()->Add(TrendlineType::Exponential);
exponentialTrendline->set_DisplayEquation(false);
exponentialTrendline->set_DisplayRSquaredValue(false);
auto linearTrendline = firstSeries->get_TrendLines()->Add(TrendlineType::Linear);
linearTrendline->get_Format()->get_Line()->get_FillFormat()->set_FillType(FillType::Solid);
linearTrendline->get_Format()->get_Line()->get_FillFormat()->get_SolidFillColor()->set_Color(Color::get_Red());
auto secondSeries = chart->get_ChartData()->get_Series()->idx_get(1);
auto logarithmicTrendline = secondSeries->get_TrendLines()->Add(TrendlineType::Logarithmic);
logarithmicTrendline->AddTextFrameForOverriding(u"New log trend line");
auto movingAverageTrendline = secondSeries->get_TrendLines()->Add(TrendlineType::MovingAverage);
movingAverageTrendline->set_Period(3);
movingAverageTrendline->set_TrendlineName(u"New TrendLine Name");
auto thirdSeries = chart->get_ChartData()->get_Series()->idx_get(2);
auto polynomialTrendline = thirdSeries->get_TrendLines()->Add(TrendlineType::Polynomial);
polynomialTrendline->set_Forward(1);
polynomialTrendline->set_Order(3);
auto powerTrendline = thirdSeries->get_TrendLines()->Add(TrendlineType::Power);
powerTrendline->set_Backward(1);
presentation->Save(u"ChartTrendLines.pptx", SaveFormat::Pptx);
추세선 절편 설정
ITrendline::set_Intercept을 사용하여 X = 0에서 추세선의 Y 값을 고정합니다. 이 설정은 선형, 지수 및 다항식 추세선에 대해 지원됩니다.
예를 들어, 생산 비용 모델에서 측정값이 다른 기준선을 제시하더라도 100이라는 알려진 고정 비용에서 시작해야 할 수 있습니다. 선형 추세선의 경우 절편을 고정하면 방정식 y = ax + b가 b = 100으로 제한되고, 기울기는 해당 제한 하에서 데이터에 맞추어집니다. 이는 이미 맞춰진 선을 단순히 이동시키는 것이 아닙니다. 축 교차 설정은 차트 축이 만나는 위치를 제어할 뿐, 맞춰진 추세선의 계수를 변경하지 않습니다.
다음 예제는 생산량이 1~4이고 비용이 170, 200, 230, 260인 산점도(XY) 차트를 생성합니다. 기본 자동 절편으로 차트를 저장한 뒤, 절편을 100으로 설정하고 두 번째 PPTX 파일을 저장합니다. 두 파일은 절편 설정만 다릅니다. 추세선은 방정식을 표시하고 X = 0까지 뒤로 연장됩니다.
#include <system/shared_ptr.h>
#include <system/object_ext.h>
#include <DOM/Chart/IChartDataWorkbook.h>
#include <DOM/Chart/IChartDataCell.h>
#include <DOM/Chart/IChartCategoryCollection.h>
#include <DOM/Chart/IChartDataPointCollection.h>
#include <DOM/Presentation.h>
#include <DOM/ISlide.h>
#include <DOM/IShapeCollection.h>
#include <DOM/IChart.h>
#include <DOM/Chart/ChartType.h>
#include <DOM/Chart/IChartData.h>
#include <DOM/Chart/IChartSeries.h>
#include <DOM/Chart/IChartSeriesCollection.h>
#include <DOM/Chart/ITrendline.h>
#include <DOM/Chart/ITrendlineCollection.h>
#include <DOM/Chart/TrendlineType.h>
#include <Export/SaveFormat.h>
using namespace System;
using namespace Aspose::Slides;
using namespace Aspose::Slides::Charts;
using namespace Aspose::Slides::Export;
auto presentation = MakeObject<Presentation>();
auto slide = presentation->get_Slide(0);
auto chart = slide->get_Shapes()->AddChart(ChartType::ScatterWithMarkers, 20, 20, 480, 210);
chart->set_HasLegend(false);
chart->get_ChartData()->get_Series()->Clear();
chart->get_ChartData()->get_Categories()->Clear();
auto workbook = chart->get_ChartData()->get_ChartDataWorkbook();
workbook->Clear(0);
auto nameCell = workbook->GetCell(0, 0, 1, ObjectExt::Box<String>(u"Production cost"));
auto series = chart->get_ChartData()->get_Series()->Add(nameCell, ChartType::ScatterWithMarkers);
const double costs[] = { 170, 200, 230, 260 };
for (auto i = 0; i < 4; i++)
{
auto xCell = workbook->GetCell(0, i + 1, 0, ObjectExt::Box<int32_t>(i + 1));
auto yCell = workbook->GetCell(0, i + 1, 1, ObjectExt::Box<double>(costs[i]));
series->get_DataPoints()->AddDataPointForScatterSeries(xCell, yCell);
}
auto trendline = series->get_TrendLines()->Add(TrendlineType::Linear);
trendline->set_DisplayEquation(true);
trendline->set_Backward(1);
presentation->Save(u"AutomaticIntercept.pptx", SaveFormat::Pptx);
trendline->set_Intercept(100);
presentation->Save(u"FixedIntercept.pptx", SaveFormat::Pptx);
자동 계산 시, 이 데이터는 y = 30x + 140을 생성합니다. 절편을 100으로 설정하면 대략 y = 43.33x + 100이 됩니다. 즉, 영점에서의 맞춰진 값이 알려진 기준선과 일치하지만, 선은 더 이상 모든 데이터 포인트를 통과하지 않습니다.
| 자동 절편 | 절편 100 고정 |
|---|---|
![]() |
![]() |
두 이미지 모두 동일한 데이터와 축 눈금을 사용합니다. 추세선은 절편을 보여주기 위해 X = 0까지 뒤로 연장되었습니다.
기본값으로 이 속성은 std::numeric_limits<double>::quiet_NaN()을 포함하며, 이는 절편이 지정되지 않았음을 의미하고 0이 아닙니다. 그런 경우 절편은 데이터에서 자동으로 계산됩니다.
사용자 정의 선 추가
사용자 정의 선은 시리즈 데이터에서 계산된 추세선이 아니라 차트 위에 그려지는 도형입니다. 이 예제에서는 IShapeCollection::AddAutoShape을 사용하여 차트 위에 가로선을 추가합니다. 선의 위치는 포인트 단위의 슬라이드 좌표로 지정되며, 차트 왼쪽 가장자리에서 시작해 차트 중간 높이에 배치됩니다. 선의 너비는 차트 전체 너비와 일치합니다. IShape::get_LineFormat이 반환하는 선 형식으로 선에 단색 빨간색을 적용합니다.
#include <system/shared_ptr.h>
#include <drawing/color.h>
#include <DOM/Presentation.h>
#include <DOM/ISlide.h>
#include <DOM/IShapeCollection.h>
#include <DOM/IAutoShape.h>
#include <DOM/ShapeType.h>
#include <DOM/ILineFormat.h>
#include <DOM/IFillFormat.h>
#include <DOM/IColorFormat.h>
#include <DOM/FillType.h>
#include <DOM/IChart.h>
#include <DOM/Chart/ChartType.h>
#include <Export/SaveFormat.h>
using namespace System;
using namespace System::Drawing;
using namespace Aspose::Slides;
using namespace Aspose::Slides::Charts;
using namespace Aspose::Slides::Export;
auto presentation = MakeObject<Presentation>();
auto slide = presentation->get_Slide(0);
auto chart = slide->get_Shapes()->AddChart(ChartType::ClusteredColumn, 100, 100, 500, 400);
auto line = slide->get_Shapes()->AddAutoShape(ShapeType::Line, chart->get_X(), chart->get_Y() + chart->get_Height() / 2, chart->get_Width(), 0);
line->get_LineFormat()->get_FillFormat()->set_FillType(FillType::Solid);
line->get_LineFormat()->get_FillFormat()->get_SolidFillColor()->set_Color(Color::get_Red());
presentation->Save(u"AddCustomLines.pptx", SaveFormat::Pptx);
FAQ
‘앞쪽’과 ‘뒤쪽’은 추세선에서 무엇을 의미합니까?
추세선을 앞쪽 또는 뒤쪽으로 투영한 길이입니다. 산점도(XY) 차트에서는 축 단위로, 비산점도 차트에서는 카테고리 수로 표시됩니다. 음수 값은 허용되지 않습니다.
프레젠테이션을 PDF 또는 SVG로 내보내거나 슬라이드를 이미지로 렌더링할 때 추세선이 유지됩니까?
예. Aspose.Slides는 프레젠테이션을 PDF 또는 SVG로 변환하고 차트를 이미지로 렌더링합니다; 차트의 일부인 추세선은 이러한 작업 중에 유지됩니다. 차트 자체의 이미지를 내보내는 메서드도 제공됩니다.

