Ejemplo n.º 1
0
        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]);
            }
        }
Ejemplo n.º 2
0
        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);
        }