FlexChart for WPF
系列へのデータの追加
FlexChart > FlexChart の操作 > FlexChart の要素 > FlexChart の系列 > 系列へのデータの追加

系列へのデータの追加については、強力な連結による方法が提供されています。FlexChart 内の系列を複数のデータソースと連結することができるため、複数のデータソースのデータを組み合わせることができます。複数のデータソースのデータをプロットするには、Series.ItemsSource プロパティを使用する必要があります。

次のコードを参照してください。次のコードでは、DataCreator.cs クラスを使用してデータを生成しています。

<c1:C1FlexChart x:Name="flexChart" 
                ItemsSource="{Binding DataContext.Data}" 
                ChartType="Scatter">
    <c1:C1FlexChart.Series>
        <c1:Series  x:Name="Function1" 
                    SeriesName="関数1" 
                    BindingX ="XVals" 
                    Binding="YVals"/>
        <c1:Series  x:Name="Function2" 
                    SeriesName="関数2" 
                    BindingX ="XVals" 
                    Binding="YVals"/>
    </c1:C1FlexChart.Series>
</c1:C1FlexChart>
DataCreator.cs
コードのコピー
class DataCreator
{
    public delegate double MathActionDouble(double num);
    public delegate double MathActionInt(int num);

    public static List<DataPoint> Create(MathActionDouble function, 
        double from, double to, double step)
    {
        var result = new List<DataPoint>();
        var count = (to - from) / step;

        for (double r = from; r < to; r += step)
        {
            result.Add(new DataPoint()
            {
                XVals = r,
                YVals = function(r)
            });
        }
        return result;
    }

    public static List<DataPoint> Create(MathActionInt function, 
        int from, int to, int step)
    {
        var result = new List<DataPoint>();
        var count = (to - from) / step;

        for (int r = from; r < to; r += step)
        {
            result.Add(new DataPoint()
            {
                XVals = r,
                YVals = function(r)
            });
        }
        return result;
    }

    public static List<DataPoint> Create(MathActionDouble functionX, 
        MathActionDouble functionY, int ptsCount)
    {
        var result = new List<DataPoint>();

        for (double i = 0; i < ptsCount; i++)
        {
            result.Add(new DataPoint()
            {
                XVals = functionX(i),
                YVals = functionY(i)
            });
        }
        return result;
    }
}

public class DataPoint
{
    public double XVals { get; set; }
    public double YVals { get; set; }
}

MainWindow.xaml.cs
コードのコピー
public partial class MainWindow : Window
{


    List<DataPoint> _function1Source;
    List<DataPoint> _function2Source;

    public MainWindow()
    {
        this.InitializeComponent();
        this.Loaded += Form_Loaded;
    }

    private void Form_Loaded(object sender, EventArgs e)
    {
        SetupChart();
    }

    void SetupChart()
    {
        flexChart.BeginUpdate();
        this.Function1.ItemsSource = Function1Source;
        this.Function2.ItemsSource = Function2Source;
        flexChart.EndUpdate();
    }

    public List<DataPoint> Function1Source
    {
        get
        {
            if (_function1Source == null)
            {
                _function1Source = DataCreator.Create(x => 2 * Math.Sin(0.16 * x), 
                y => 2 * Math.Cos(0.12 * y), 160);
            }

            return _function1Source;
        }
    }

    public List<DataPoint> Function2Source
    {
        get
        {
            if (_function2Source == null)
            {
                _function2Source = DataCreator.Create(x => Math.Sin(0.1 * x), 
                y => Math.Cos(0.15 * y), 160);
            }

            return _function2Source;
        }
    }
}