Xamarin.iOS のドキュメント
複合チャート
コントロール > FlexChart > 機能 > 複合チャート

チャートに複数の系列を追加し、系列ごとに異なる ChartType を設定できます。このようなチャートは、1 つのキャンバスで複雑なチャートデータを分析する場合に役立ちます。同じデータを異なる方法で視覚化して使用したり、関連するデータを一緒に表示して傾向を示すことができます。

次の図は、複数の系列を持つ FlexChart を示しています。

次のコード例は、さまざまな ChartType を使用して ChartSeries タイプの複数のインスタンスを作成し、それらを FlexChart に追加する方法を示します。

  1. FlexChart コントロールのデータソースとして、アプリケーションに新しいクラス SalesData を追加します。
    CS
    コードのコピー
    class SalesData
    {
        #region ** fields
    
        static Random _rnd = new Random();
        static string[] _countries = new string[] { "アメリカ", "ドイツ", "イギリス", "日本", "イタリア", "ギリシャ" };
    
        #endregion
    
        #region ** initialization
    
        public SalesData()
        {
            this.Name = string.Empty;
            this.Sales = 0;
            this.Expenses = 0;
            this.Downloads = 0;
            this.Date = DateTime.Now;
        }
    
        public SalesData(string name, double sales, double expenses, double downloads, DateTime date)
        {
            this.Name = name;
            this.Sales = sales;
            this.Expenses = expenses;
            this.Downloads = downloads;
            this.Date = date;
        }
    
        #endregion
    
        #region ** object model
    
        [Export("Name")]
        public string Name { get; set; }
        [Export("Sales")]
        public double Sales { get; set; }
        [Export("Expenses")]
        public double Expenses { get; set; }
        [Export("Downloads")]
        public double Downloads { get; set; }
    
        public DateTime Date { get; set; }
        [Export("Date")]
        public NSDate iOSDate
        {
            get
            {
                return DateTimeToNSDate(Date);
            }
            set
            {
                Date = NSDateToDateTime(value);
            }
        }
        #endregion
    
        #region ** implementation
    
        // ** 静的リストプロバイダ
        public static List<SalesData> GetSalesDataList()
        {
            List<SalesData>  array = new List<SalesData> ();
            for (int i = 0; i < GetCountries().Length; i++)
            {
                array.Add(new SalesData
                {
                    Sales = _rnd.NextDouble() * 10000,
                    Expenses = _rnd.NextDouble() * 5000,
                    Downloads = _rnd.Next(20000),
                    Date = DateTime.Now.AddDays(i),
                    Name = GetCountries()[i]
                });
            }
            return array;
        }
    
        public static List<SalesData> GetSalesDataList2()
        {
            List<SalesData> array = new List<SalesData>();
            for (int i = 0; i < GetCountries().Length; i++)
            {
                array.Add(new SalesData
                {
                    Sales = _rnd.Next(100) * 100,
                    Expenses = _rnd.Next(100) * 50,
                    Downloads = _rnd.Next(100),
                    Date = DateTime.Now.AddDays(i),
                    Name = GetCountries()[i]
                });
            }
            return array;
        }
    
        public NSDate DateTimeToNSDate(DateTime date)
        {
            if (date.Kind == DateTimeKind.Unspecified)
                date = DateTime.SpecifyKind(date, DateTimeKind.Utc);
            return (NSDate)date;
        }
    
        public DateTime NSDateToDateTime(NSDate date)
        {
            // NSDateの範囲はDateTimeよりも広いため、
                // 変換された日付をDateTime.Min|MaxValueにクリップします。
            double secs = date.SecondsSinceReferenceDate;
            if (secs < -63113904000)
                return DateTime.MinValue;
            if (secs > 252423993599)
                return DateTime.MaxValue;
                return (DateTime)date;
        }
    
        // ** 静的リストプロバイダ
        public static string[] GetCountries() { return _countries; }
    
        #endregion
    }
    
  2. 複合チャートを作成するには、ViewDidLoad()メソッドに次のコードを追加します。
    C#
    コードのコピー
    chart.BindingX = "Name";
    
    chart.Series.Add(new ChartSeries() { SeriesName = "販売", Binding = "Sales,Sales" });
    chart.Series.Add(new ChartSeries() { SeriesName = "費用", Binding = "Expenses,Expenses" });
    chart.Series.Add(new ChartSeries() { SeriesName = "ダウンロード", Binding = "Downloads,Downloads", ChartType = C1.iOS.Chart.ChartType.LineSymbols });
    chart.ItemsSource = SalesData.GetSalesDataList();
    
関連トピック