public IReadOnlyList <string> GenerateLabels(LabelGenerationOptions options, IReadOnlyList <double> intervalLimitsInDisplayUnit) { //1.. 2.. 3 => 3 limits but two labels int numberOfLabels = intervalLimitsInDisplayUnit.Count - 1; string pattern = options.Pattern; if (!options.IsValid) { return(new string[numberOfLabels].InitializeWith(pattern)); } var nextPattern = getGenerator(options.Strategy); var labels = new List <string>(); //starts at 1 as it makes label generation easier to read for user for (int i = 1; i <= numberOfLabels; i++) { var currentPattern = nextPattern(i); labels.Add(pattern.Replace(LabelGenerationOptions.ITERATION_PATTERN, currentPattern)); } updateLabelsWithLimits(labels, intervalLimitsInDisplayUnit, options); return(labels); }
private void updateLabelsWithLimits(List <string> labels, IReadOnlyList <double> limits, LabelGenerationOptions options) { if (!options.HasIntervalPattern) { return; } for (int i = 0; i < labels.Count; i++) { var label = labels[i]; label = options.ReplaceStartIntervalIn(label, limits[i]); label = options.ReplaceEndIntervalIn(label, limits[i + 1]); labels[i] = label; } }
public IReadOnlyList <string> GenerateLabels(IPopulationDataCollector populationDataCollector, PopulationAnalysisNumericField numericField, LabelGenerationOptions options, int numberOfLabels) { var groupingDefinition = new NumberOfBinsGroupingDefinition(numericField.Name) { NumberOfBins = numberOfLabels, NamingPattern = options.Pattern, Strategy = options.Strategy }; groupingDefinition.CreateLimits(populationDataCollector, numericField); return(GenerateLabels(populationDataCollector, numericField, groupingDefinition)); }