fix: Heatmap numeric sorting (#27360)

This commit is contained in:
Michael S. Molina 2024-03-01 13:08:30 -05:00 committed by GitHub
parent ae8ec9c2b4
commit fe2f5a7be9
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 12 additions and 11 deletions

View File

@ -177,15 +177,12 @@ function Heatmap(element, props) {
} }
} }
function ordScale(k, rangeBands, sortMethod) { function ordScale(k, rangeBands, sortMethod, formatter) {
let domain = {}; let domain = {};
const actualKeys = {}; // hack to preserve type of keys when number
records.forEach(d => { records.forEach(d => {
domain[d[k]] = (domain[d[k]] || 0) + d.v; domain[d[k]] = (domain[d[k]] || 0) + d.v;
actualKeys[d[k]] = d[k];
}); });
// Not using object.keys() as it converts to strings const keys = Object.keys(domain).map(k => formatter(k));
const keys = Object.keys(actualKeys).map(s => actualKeys[s]);
if (sortMethod === 'alpha_asc') { if (sortMethod === 'alpha_asc') {
domain = keys.sort(cmp); domain = keys.sort(cmp);
} else if (sortMethod === 'alpha_desc') { } else if (sortMethod === 'alpha_desc') {
@ -252,10 +249,10 @@ function Heatmap(element, props) {
const fp = getNumberFormatter(NumberFormats.PERCENT_2_POINT); const fp = getNumberFormatter(NumberFormats.PERCENT_2_POINT);
const xScale = ordScale('x', null, sortXAxis); const xScale = ordScale('x', null, sortXAxis, xAxisFormatter);
const yScale = ordScale('y', null, sortYAxis); const yScale = ordScale('y', null, sortYAxis, yAxisFormatter);
const xRbScale = ordScale('x', [0, hmWidth], sortXAxis); const xRbScale = ordScale('x', [0, hmWidth], sortXAxis, xAxisFormatter);
const yRbScale = ordScale('y', [hmHeight, 0], sortYAxis); const yRbScale = ordScale('y', [hmHeight, 0], sortYAxis, yAxisFormatter);
const X = 0; const X = 0;
const Y = 1; const Y = 1;
const heatmapDim = [xRbScale.domain().length, yRbScale.domain().length]; const heatmapDim = [xRbScale.domain().length, yRbScale.domain().length];

View File

@ -57,11 +57,15 @@ export default function transformProps(chartProps) {
const xAxisFormatter = const xAxisFormatter =
coltypes[0] === GenericDataType.Temporal coltypes[0] === GenericDataType.Temporal
? getTimeFormatter(timeFormat) ? getTimeFormatter(timeFormat)
: String; : coltypes[0] === GenericDataType.Numeric
? Number
: String;
const yAxisFormatter = const yAxisFormatter =
coltypes[1] === GenericDataType.Temporal coltypes[1] === GenericDataType.Temporal
? getTimeFormatter(timeFormat) ? getTimeFormatter(timeFormat)
: String; : coltypes[1] === GenericDataType.Numeric
? Number
: String;
return { return {
width, width,
height, height,