作成日: 2022/05/18 最終更新日: 2022/05/18
文書種別
使用方法
詳細
TrendLineクラスを使用してデータの傾向を示す近似曲線を描画した場合、その曲線の係数はTrendLineクラスのCoefficientsコレクションを用いて取得することができます。
以下に、3次多項式を用いた近似曲線の係数を取得し、その多項式をフォームのタイトルバーに表示するサンプルコードを記載します。

◎サンプルコード(VB)
以下に、3次多項式を用いた近似曲線の係数を取得し、その多項式をフォームのタイトルバーに表示するサンプルコードを記載します。

◎サンプルコード(VB)
Imports C1.Win.Chart
Public Class Form1
Private tLine1 As C1.Win.Chart.TrendLine
Dim tLineOrder As Integer = 3
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' シリーズの作成
Dim series1 As New C1.Win.Chart.Series()
series1.BindingX = "X"
series1.Binding = "Y"
series1.DataSource = New System.Drawing.Point() {
New System.Drawing.Point(1, 50),
New System.Drawing.Point(2, 38),
New System.Drawing.Point(3, 42),
New System.Drawing.Point(4, 30),
New System.Drawing.Point(5, 27),
New System.Drawing.Point(6, 25),
New System.Drawing.Point(7, 33),
New System.Drawing.Point(8, 35),
New System.Drawing.Point(9, 30),
New System.Drawing.Point(10, 40)}
series1.ChartType = C1.Chart.ChartType.Scatter
' 近似曲線用シリーズの作成
tLine1 = New C1.Win.Chart.TrendLine()
tLine1.BindingX = "X"
tLine1.Binding = "Y"
tLine1.ChartType = C1.Chart.ChartType.Line
tLine1.FitType = C1.Chart.FitType.Polynom
tLine1.Order = tLineOrder
tLine1.DataSource = series1.DataSource
' チャートの設定
FlexChart1.Series.Clear()
FlexChart1.Series.Add(series1)
FlexChart1.Series.Add(tLine1)
End Sub
Private Sub FlexChart1_Rendered(sender As Object, e As RenderEventArgs) Handles FlexChart1.Rendered
' 近似曲線の係数を取得
For i As Integer = 0 To tLine1.Coefficients.Length - 1
Console.WriteLine("{0}", tLine1.Coefficients(i))
Next
' 近似曲線の数式の設定
Dim tLine As TrendLine = FlexChart1.Series(1)
Dim result As String = String.Format("{1:+0.0000;-0.0000;+0}x{0:+0.0000;-0.0000;+0}", tLine.Coefficients(0), tLine.Coefficients(1))
For i As Integer = 2 To tLineOrder
result = result.Insert(0, String.Format("{0:+0.000;-0.0000;+0}x^{1}", tLine.Coefficients(i), i))
Next
result = result.Remove(0, 1).Insert(0, "y=")
' 取得した数式の表示
Me.Text = result
Console.WriteLine(result)
End Sub
End Class
◎サンプルコード(C#)
using C1.Win.Chart;
namespace prj_FlexChart
{
public partial class Form1 : Form
{
//private C1.Win.Chart.TrendLine tLine1;
private C1.Win.Chart.TrendLine tLine1;
int tLineOrder = 3;
public Form1()
{
InitializeComponent();
// シリーズの作成
C1.Win.Chart.Series series1 = new C1.Win.Chart.Series();
series1.BindingX = "X";
series1.Binding = "Y";
series1.DataSource = new System.Drawing.Point[] {
new System.Drawing.Point(1, 50),
new System.Drawing.Point(2, 38),
new System.Drawing.Point(3, 42),
new System.Drawing.Point(4, 30),
new System.Drawing.Point(5, 27),
new System.Drawing.Point(6, 25),
new System.Drawing.Point(7, 33),
new System.Drawing.Point(8, 35),
new System.Drawing.Point(9, 30),
new System.Drawing.Point(10, 40) };
series1.ChartType = C1.Chart.ChartType.Scatter;
// 近似曲線用シリーズの作成
tLine1 = new C1.Win.Chart.TrendLine();
tLine1.BindingX = "X";
tLine1.Binding = "Y";
tLine1.ChartType = C1.Chart.ChartType.Line;
tLine1.FitType = C1.Chart.FitType.Polynom;
tLine1.Order = tLineOrder;
tLine1.DataSource = series1.DataSource;
// チャートの設定
flexChart1.Series.Clear();
flexChart1.Series.Add(series1);
flexChart1.Series.Add(tLine1);
}
private void flexChart1_Rendered(object sender, RenderEventArgs e)
{
// 近似曲線の係数を取得
for (int i = 0; i <= tLine1.Coefficients.Length - 1; i++)
Console.WriteLine("{0}", tLine1.Coefficients[i]);
// 近似曲線の数式の設定
TrendLine tLine = (TrendLine)flexChart1.Series[1];
string result = string.Format("{1:+0.0000;-0.0000;+0}x{0:+0.0000;-0.0000;+0}", tLine.Coefficients[0], tLine.Coefficients[1]);
for (int i = 2; i <= tLineOrder; i++)
result = result.Insert(0, string.Format("{0:+0.000;-0.0000;+0}x^{1}", tLine.Coefficients[i], i));
result = result.Remove(0, 1).Insert(0, "y=");
// 取得した数式の表示
this.Text = result;
Console.WriteLine(result);
}
}
}