in src/EnhancedScatterChart.ts [726:829]
public parseData(
dataView: DataView,
colorPalette: IColorPalette,
visualHost: IVisualHost,
interactivityService: IInteractivityService<BaseDataPoint>,
): EnhancedScatterChartData {
const settings: Settings = this.parseSettings(dataView, new ColorHelper(colorPalette));
if (!this.isDataViewValid(dataView)) {
return this.getDefaultData(settings);
}
let categoryValues: any[],
categoryFormatter: IValueFormatter,
categoryObjects: DataViewObjects[],
dataViewCategorical: DataViewCategorical = dataView.categorical,
categories: DataViewCategoryColumn[] = dataViewCategorical.categories || [],
dataValues: DataViewValueColumns = dataViewCategorical.values,
hasDynamicSeries: boolean = !!dataValues.source,
grouped: DataViewValueColumnGroup[] = dataValues.grouped(),
dvSource: DataViewMetadataColumn = dataValues.source,
scatterMetadata: EnhancedScatterChartMeasureMetadata = EnhancedScatterChart.getMetadata(categories, grouped),
categoryIndex: number = scatterMetadata.idx.category,
useShape: boolean = scatterMetadata.idx.image >= EnhancedScatterChart.MinIndex,
useCustomColor: boolean = scatterMetadata.idx.colorFill >= EnhancedScatterChart.MinIndex;
if (dataViewCategorical.categories
&& dataViewCategorical.categories.length > 0
&& dataViewCategorical.categories[categoryIndex]
) {
const mainCategory: DataViewCategoryColumn = dataViewCategorical.categories[categoryIndex];
categoryValues = mainCategory.values;
categoryFormatter = valueFormatter.create({
format: valueFormatter.getFormatStringByColumn(mainCategory.source),
value: categoryValues[0],
value2: categoryValues[categoryValues.length - 1]
});
categoryObjects = mainCategory.objects;
}
else {
categoryValues = [null];
// creating default formatter for null value (to get the right string of empty value from the locale)
categoryFormatter = valueFormatter.createDefaultFormatter(null);
}
const sizeRange: ValueRange<number> = EnhancedScatterChart.getSizeRangeForGroups(
grouped,
scatterMetadata.idx.size
);
settings.fillPoint.isHidden = !!(sizeRange && sizeRange.min);
const colorHelper: ColorHelper = new ColorHelper(
colorPalette,
{
objectName: "dataPoint",
propertyName: "fill"
},
hasDynamicSeries
? undefined
: settings.dataPoint.defaultColor
);
const dataPoints: EnhancedScatterChartDataPoint[] = this.createDataPoints(
visualHost,
dataValues,
scatterMetadata,
categories,
categoryValues,
categoryFormatter,
categoryObjects,
hasDynamicSeries,
colorHelper,
settings,
);
if (interactivityService) {
interactivityService.applySelectionStateToData(dataPoints);
}
const legendParseResult = this.parseLegend(visualHost, dataValues, dvSource, categories, categoryIndex, colorHelper, hasDynamicSeries);
let legendDataPoints: LegendDataPoint[] = legendParseResult.legendDataPoints;
let legendTitle: string = legendParseResult.legendTitle;
this.changeSettingsAndMetadata(dataPoints, scatterMetadata, settings, legendTitle);
const hasGradientRole: boolean = gradientUtils.hasGradientRole(dataViewCategorical);
return {
settings,
dataPoints,
legendDataPoints,
sizeRange,
hasGradientRole,
hasDynamicSeries,
useShape,
useCustomColor,
xCol: scatterMetadata.cols.x,
yCol: scatterMetadata.cols.y,
axesLabels: scatterMetadata.axesLabels,
selectedIds: [],
size: scatterMetadata.cols.size,
};
}