private void ChartLoaded(object sender, RoutedEventArgs e)
        {
            if (chart.Series.Count > 0)
            {
                return;
            }

            chart.BeginUpdate();

            var scale = new DiscreteColorScale()
            {
                Intervals = new List <DiscreteColorScale.Interval>()
            };

            scale.Intervals.Add(new DiscreteColorScale.Interval(0, 10, Color.FromRgb(0x05, 0x71, 0xB0), "Very Low"));
            scale.Intervals.Add(new DiscreteColorScale.Interval(10, 25, Color.FromRgb(0x92, 0xC5, 0xDE), "Low"));
            scale.Intervals.Add(new DiscreteColorScale.Interval(25, 75, Color.FromRgb(0xD7, 0xD7, 0xD7), "Normal"));
            scale.Intervals.Add(new DiscreteColorScale.Interval(75, 90, Color.FromRgb(0xF4, 0xA5, 0x82), "High"));
            scale.Intervals.Add(new DiscreteColorScale.Interval(90, 100, Color.FromRgb(0xCA, 0x00, 0x20), "Critical"));

            var rnd  = new Random();
            var data = new double[24, 7];

            for (var j = 0; j < 7; j++)
            {
                for (var i = 0; i < 24; i++)
                {
                    data[i, j] = 10 * Math.Exp(-(i - 12) * (i - 12) / (2 * 4.0 * 4.0)) / Math.Sqrt(2 * Math.PI * 4.0 * 4.0) * ((j == 5 || j == 6) ? 50 : 100) * rnd.NextDouble();
                }
            }

            var hmap = new Heatmap();

            hmap.ItemsSource = data;
            hmap.ColorScale  = scale;
            chart.Series.Add(hmap);

            var times = new string[24];

            for (var i = 0; i < 24; i++)
            {
                times[i] = new DateTime(2000, 1, 1, i, 0, 0).ToShortTimeString();
            }
            chart.AxisX.ItemsSource = times;

            chart.AxisY.ItemsSource = new string[] { "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun" };

            chart.EndUpdate();
        }
        protected override void SetupChart()
        {
            this.flexChart1.Header.Content    = "Weekly Traffic Intensity";
            this.flexChart1.Header.Style.Font = StyleInfo.ChartHeaderFont;

            var data = DataService.Get2DTrafficData();

            var discreteScale = new DiscreteColorScale
            {
                Intervals = new List <DiscreteColorScale.Interval>
                {
                    new DiscreteColorScale.Interval(0, 10, Color.FromArgb(0x05, 0x71, 0xB0), "Very Low"),
                    new DiscreteColorScale.Interval(10, 25, Color.FromArgb(0x92, 0xC5, 0xDE), "Low"),
                    new DiscreteColorScale.Interval(25, 75, Color.FromArgb(0xD7, 0xD7, 0xD7), "Normal"),
                    new DiscreteColorScale.Interval(75, 90, Color.FromArgb(0xF4, 0xA5, 0x82), "High"),
                    new DiscreteColorScale.Interval(90, 100, Color.FromArgb(0xCA, 0x00, 0x20), "Critical"),
                }
            };
            var heatmap = new Heatmap
            {
                ColorScale = discreteScale,
                DataSource = data.Values,
            };

            this.flexChart1.Series.Add(heatmap);

            this.flexChart1.AxisX.Min = heatmap.StartX;
            this.flexChart1.AxisX.Max = data.Values.GetLength(0) + heatmap.StartX;

            this.flexChart1.AxisX.MinorGrid = true;
            this.flexChart1.AxisX.MinorGridStyle.StrokeColor = Color.White;
            this.flexChart1.AxisX.LabelAngle = 45;

            this.flexChart1.AxisY.MajorGrid = false;
            this.flexChart1.AxisY.MinorGrid = true;
            this.flexChart1.AxisY.MinorGridStyle.StrokeColor = Color.White;

            this.flexChart1.AxisX.DataSource = data.CatXData;
            this.flexChart1.AxisY.DataSource = data.CatYData;
            this.flexChart1.ToolTip.Content  = "{item:0.00} %";
        }
        private void Loading_Load(object sender, EventArgs e)
        {
            var chart = new FlexChart();

            chart.Legend.Position                  = Position.Bottom;
            chart.Dock                             = DockStyle.Fill;
            chart.AxisX.MajorGrid                  = false;
            chart.AxisX.MinorGrid                  = true;
            chart.AxisX.MajorTickMarks             = TickMark.None;
            chart.AxisX.AxisLine                   = false;
            chart.AxisX.MinorGridStyle.StrokeColor = Color.LightGray;
            chart.AxisY.MajorGrid                  = false;
            chart.AxisY.MinorGrid                  = true;
            chart.AxisY.MinorGridStyle.StrokeColor = Color.LightGray;
            chart.Header.Content                   = "Weekly traffic intensity";
            chart.Header.Style.Font                = new Font("Seqoe UI", 16);

            chart.ToolTip.Content = "{item:0.0}%";

            var scale = new DiscreteColorScale()
            {
                Intervals = new List <DiscreteColorScale.Interval>()
            };

            scale.Intervals.Add(new DiscreteColorScale.Interval(0, 10, Color.FromArgb(unchecked ((int)0xFF0571B0)), "Very Low"));
            scale.Intervals.Add(new DiscreteColorScale.Interval(10, 25, Color.FromArgb(unchecked ((int)0xFF92C5DE)), "Low"));
            scale.Intervals.Add(new DiscreteColorScale.Interval(25, 75, Color.FromArgb(unchecked ((int)0xFFF7F7F7)), "Normal"));
            scale.Intervals.Add(new DiscreteColorScale.Interval(75, 90, Color.FromArgb(unchecked ((int)0xFFF4A582)), "High"));
            scale.Intervals.Add(new DiscreteColorScale.Interval(90, 100, Color.FromArgb(unchecked ((int)0xFFCA0020)), "Critical"));

            // generated some random data
            var rnd  = new Random();
            var data = new double[24, 7];

            for (var j = 0; j < 7; j++)
            {
                for (var i = 0; i < 24; i++)
                {
                    data[i, j] = 10 * Math.Exp(-(i - 12) * (i - 12) / (2 * 4.0 * 4.0)) / Math.Sqrt(2 * Math.PI * 4.0 * 4.0) * ((j == 5 || j == 6) ? 50 : 100) * rnd.NextDouble();
                }
            }

            var hmap = new Heatmap();

            hmap.DataSource = data;
            hmap.ColorScale = scale;
            chart.Series.Add(hmap);

            var times = new string[24];

            for (var i = 0; i < 24; i++)
            {
                times[i] = new DateTime(2000, 1, 1, i, 0, 0).ToShortTimeString();
            }
            chart.AxisX.DataSource = times;
            chart.AxisX.LabelAngle = 45;

            chart.AxisY.DataSource = new string[] { "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun" };
            chart.AxisY.Reversed   = true;

            Controls.Add(chart);
        }