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

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

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

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <Chart:C1FlexChart x:Name="flexChart" ChartType="Scatter">
        <Chart:C1FlexChart.Series>
            <Chart:Series x:Name="Function1" 
            SeriesName="Function 1" BindingX="XVals" Binding="YVals"></Chart:Series>
            <Chart:Series x:Name="Function2" 
            SeriesName="Function 2" BindingX="XVals" Binding="YVals"></Chart:Series>
        </Chart:C1FlexChart.Series>
    </Chart:C1FlexChart>
    <VisualStateManager.VisualStateGroups>
        <VisualStateGroup>
            <VisualState x:Name="WideLayout">
                <VisualState.StateTriggers>
                    <AdaptiveTrigger MinWindowWidth="540"></AdaptiveTrigger>
                </VisualState.StateTriggers>
            </VisualState>
            <VisualState x:Name="NarrowLayout">
                <VisualState.StateTriggers>
                    <AdaptiveTrigger MinWindowWidth="0"></AdaptiveTrigger>
                </VisualState.StateTriggers>
                <VisualState.Setters>
                    <Setter Target="flexChart.LegendPosition" Value="Top"></Setter>
                </VisualState.Setters>
            </VisualState>
        </VisualStateGroup>
    </VisualStateManager.VisualStateGroups>
</Grid>
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 sealed partial class MainPage : Page
{
    List<DataPoint> _function1Source;
    List<DataPoint> _function2Source;

    public MainPage()
    {
        this.InitializeComponent();
        this.Loaded += SeriesBinding_Loaded;
    }

    private void SeriesBinding_Loaded(object sender, RoutedEventArgs 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;
        }
    }
}