public static object Scale(this ScaleOrdinal scale, object value) { if (scale == null) { BH.Engine.Reflection.Compute.RecordError("Cannot query the scale of a null ordinal scale object."); return(null); } int i = scale.Domain.IndexOf(value.ToString()); if (i == -1) { return(null); } if (scale.Range.All(r => r.IsNumericType()) && scale.Range.Count == 2) { Domain d = new Domain(0, scale.Domain.Count); Domain r = new Domain(System.Convert.ToDouble(scale.Range[0]), System.Convert.ToDouble(scale.Range[1])); return(Map(d, r, i)); } else { if (i > scale.Range.Count - 1) { i = i % (scale.Range.Count); } return(scale.Range[i]); } }
public static IScale IScale(List <object> domain, List <object> range) { IScale scale = null; if (domain.All(d => d.IsNumericType()) && range.All(d => d.IsNumericType())) { List <double> d = new List <double>(); domain.ForEach(x => d.Add(System.Convert.ToDouble(x))); List <double> r = new List <double>(); range.ForEach(x => r.Add(System.Convert.ToDouble(x))); scale = new ScaleLinear() { Domain = Data.Create.Domain(d), Range = Data.Create.Domain(r) }; return(scale); } else { List <string> d = domain.ToStringList().Distinct().ToList(); scale = new ScaleOrdinal() { Domain = d, Range = range }; } //date time //non linear //others to do return(scale); }