public HistogramBins(double low = 100, double width = 10, int count = 10)
 {
     Low = low;
     Width = width;
     Bins = new int[count + 2];
     BinNames = new string[count + 2];
     _points = new ObservableCollection<Point>();
     for (var i = 0; i < Bins.Length; i++)
     {
         _points.Add(new Point(i, 0));
         if (i == 0) BinNames[i] = string.Format("<{0:0.##}", Low);
         else if (i == Bins.Length - 1) BinNames[i] = string.Format(">{0:0.##}", Low + (Width * count));
         else BinNames[i] = string.Format("{0:0.##}", Low + (Width / 2) + (Width * i));
     }
     BarSeriesViewModel = new BarSeriesViewModel
     {
         SeriesData = _points,
         ItemToPoint = i => (Point)i,
         StrokeThickness = 1,
     };
     _propertyObserver = new PropertyObserver<HistogramBins>(this)
         .RegisterHandler(p => p.DataSetName, () => { BarSeriesViewModel.SeriesName = DataSetName; });
     _updatePointsOnAdd = true;
 }
 void CreateBottomLeftSeries()
 {
     const double rangeStart = 1;
     const int rangeEnd = 10;
     const double rangeStep = 1;
     BottomLeft.XAxis.AxisType = AxisType.Enumerated;
     BottomLeft.YAxis.AxisType = AxisType.Logarithmic;
     BottomLeft.XAxis.AxisTicks = new ObservableCollection<DataAxisTick>
     {
         new DataAxisTick(-1, null, false),
         new DataAxisTick(0, "Zero", false),
         new DataAxisTick(1, "One", false),
         new DataAxisTick(2, "Two", false),
         new DataAxisTick(3, "Three", false),
         new DataAxisTick(4, "Four", false),
         new DataAxisTick(5, "Five", false),
         new DataAxisTick(6, "Six", false),
         new DataAxisTick(7, "Seven", false),
         new DataAxisTick(8, "Eight", false),
         new DataAxisTick(9, "Nine", false),
         new DataAxisTick(10, "Ten", false),
         new DataAxisTick(11, null, false),
     };
     //BottomLeft.YAxis.DataRange.Update(0, 2);
     BottomLeft.XAxis.DataRange.Update(-1, 11);
     BottomLeft.YAxis.DataRange.Update(0.1, 10);
     var redSeries = new BarSeriesViewModel
     {
         SeriesData = Range(rangeStart, rangeEnd, rangeStep).Select(x => Tuple.Create(x, x / 2.0)).ToObservableList(),
         ItemToPoint = i => new Point(((Tuple<double, double>)i).Item1, ((Tuple<double, double>)i).Item2),
         StrokeThickness = 1,
         SeriesName = "y = x / 2",
         Fill = new SolidColorBrush(Color.FromArgb(128, 255, 0, 0)),
     };
     var greenSeries = new BarSeriesViewModel
     {
         SeriesData = Range(rangeStart, rangeEnd, rangeStep).Select(x => Tuple.Create(x, x)).ToObservableList(),
         ItemToPoint = i => new Point(((Tuple<double, double>)i).Item1, ((Tuple<double, double>)i).Item2),
         StrokeThickness = 1,
         SeriesName = "y = x",
         Fill = new SolidColorBrush(Color.FromArgb(128, 0, 255, 0)),
     };
     var blueSeries = new BarSeriesViewModel
     {
         SeriesData = Range(rangeStart, rangeEnd, rangeStep).Select(x => Tuple.Create(x, x * 1.5)).ToObservableList(),
         ItemToPoint = i => new Point(((Tuple<double, double>)i).Item1, ((Tuple<double, double>)i).Item2),
         StrokeThickness = 1,
         SeriesName = "y = 1.5x",
         Fill = new SolidColorBrush(Color.FromArgb(128, 0, 0, 255)),
     };
     var cyanSeries = new BarSeriesViewModel
     {
         SeriesData = Range(rangeStart, rangeEnd, rangeStep).Select(x => Tuple.Create(x, x * 2)).ToObservableList(),
         ItemToPoint = i => new Point(((Tuple<double, double>)i).Item1, ((Tuple<double, double>)i).Item2),
         StrokeThickness = 1,
         SeriesName = "y = 2x",
         Fill = new SolidColorBrush(Color.FromArgb(128, 0, 255, 255)),
     };
     var magentaSeries = new BarSeriesViewModel
     {
         SeriesData = Range(rangeStart, rangeEnd, rangeStep).Select(x => Tuple.Create(x, x * 2.5)).ToObservableList(),
         ItemToPoint = i => new Point(((Tuple<double, double>)i).Item1, ((Tuple<double, double>)i).Item2),
         StrokeThickness = 1,
         SeriesName = "y = 2.5x",
         Fill = new SolidColorBrush(Color.FromArgb(128, 255, 0, 255)),
     };
     var orangeSeries = new BarSeriesViewModel
     {
         SeriesData = Range(rangeStart, rangeEnd, rangeStep).Select(x => Tuple.Create(x, x * 3)).ToObservableList(),
         ItemToPoint = i => new Point(((Tuple<double, double>)i).Item1, ((Tuple<double, double>)i).Item2),
         StrokeThickness = 1,
         SeriesName = "y = 3x",
         Fill = new SolidColorBrush(Color.FromArgb(128, 255, 165, 0)),
     };
     var blackSeries = new BarSeriesViewModel
     {
         SeriesData = Range(rangeStart, rangeEnd, rangeStep).Select(x => Tuple.Create(x, x * 3.5)).ToObservableList(),
         ItemToPoint = i => new Point(((Tuple<double, double>)i).Item1, ((Tuple<double, double>)i).Item2),
         StrokeThickness = 1,
         SeriesName = "y = 3.5x",
         Fill = new SolidColorBrush(Color.FromArgb(128, 0, 0, 0)),
     };
     var stackedSeries = new StackedBarSeriesViewModel();
     stackedSeries.BarSeriesCollection.Add(greenSeries);
     stackedSeries.BarSeriesCollection.Add(redSeries);
     stackedSeries.BarSeriesCollection.Add(blueSeries);
     stackedSeries.BarSeriesCollection.Add(cyanSeries);
     stackedSeries.BarSeriesCollection.Add(magentaSeries);
     stackedSeries.BarSeriesCollection.Add(orangeSeries);
     stackedSeries.BarSeriesCollection.Add(blackSeries);
     BottomLeft.DataSeriesCollection.Add(stackedSeries);
     //BottomLeft.DataSeriesCollection.Add(redSeries);
     //BottomLeft.DataSeriesCollection.Add(blueSeries);
     //BottomLeft.YAxis.VisibleRange.Add(0, 10);
     BottomLeft.XAxisTicks = null;
 }
 void AddSeriesBottomRightHandler(EventToCommandArgs args)
 {
     const double rangeStart = 1;
     const int rangeEnd = 10;
     const double rangeStep = 1;
     var blackSeries = new BarSeriesViewModel
     {
         SeriesData = Range(rangeStart, rangeEnd, rangeStep).Select(x => Tuple.Create(x, x * 3.5)).ToObservableList(),
         ItemToPoint = i => new Point(((Tuple<double, double>)i).Item1, ((Tuple<double, double>)i).Item2),
         StrokeThickness = 1,
         SeriesName = "y = 3.5x",
         Fill = Brushes.Black,
     };
     ((GroupedBarSeriesViewModel)BottomRight.DataSeriesCollection.First()).BarSeriesCollection.Add(blackSeries);
 }