protected override void Postprocess(IDictionary <object, HistogramSeries> seriesSet) { if (_data == null || _data.Count == 0) { return; } _intervals = GetHistogramInterval(_data.Min(), _data.Max(), _data.Count); foreach (var entry in seriesSet) { var series = entry.Value; if (series.Items.Count > 0) { throw new ArgumentException("-Data and the other data items cannot be specify at the same time"); } // Grouping is not supported in HistogramSeries var bins = HistogramSeriesHelpers.Collect(_data, _intervals, _normalize); var s = _intervals.AdjustedLower; for (var i = 0; i < _intervals.BinCount; ++i) { var item = new HistogramItem(s, s + _intervals.BinWidth, bins[i] * _intervals.BinWidth); series.Items.Add(item); s += _intervals.BinWidth; } } }
protected void SetCategories(HistogramInterval h) { _categories = new string[h.BinCount]; for (var i = 0; i < h.BinCount; ++i) { _categories[i] = $"{Math.Round(h.AdjustedLower + i * h.BinWidth, 5)} - {Math.Round(h.AdjustedLower + (i + 1) * h.BinWidth, 5)}"; } }
// Histogram private static Tuple <int[], int> CollectHistogram(IList <MetaNum> data, HistogramInterval intervals) { var result = new int[intervals.BinCount]; var total = 0; foreach (var value in data) { if (TypeTrait <MetaNum> .IsNaN(value)) { continue; } var bin = (int)Math.Floor(((double)value - intervals.AdjustedLower) / intervals.BinWidth); ++result[bin]; ++total; } return(Tuple.Create(result, total)); }