diff --git a/src/traces/parcats/calc.js b/src/traces/parcats/calc.js index 510f4eba655..51ef5e28bfa 100644 --- a/src/traces/parcats/calc.js +++ b/src/traces/parcats/calc.js @@ -16,6 +16,7 @@ var colorscaleCalc = require('../../components/colorscale/calc'); var filterUnique = require('../../lib/filter_unique.js'); var Drawing = require('../../components/drawing'); var Lib = require('../../lib'); +var isNumeric = require('fast-isnumeric'); /** * Create a wrapped ParcatsModel object from trace @@ -40,9 +41,19 @@ module.exports = function calc(gd, trace) { // then add extra to the end in trace order categoryValues = dim.categoryarray; } else { - // Get all categories up front so we can order them - // Should we check for numbers as sort numerically? - categoryValues = filterUnique(dim.values).sort(); + // Get all categories up front + categoryValues = filterUnique(dim.values); + + // order them + var allNumeric = true; + for(var i = 0; i < categoryValues.length; i++) { + if(!isNumeric(categoryValues[i])) { + allNumeric = false; + break; + } + } + categoryValues.sort(allNumeric ? Lib.sorterAsc : undefined); + if(dim.categoryorder === 'category descending') { categoryValues = categoryValues.reverse(); } diff --git a/test/image/baselines/parcats_numeric_sort.png b/test/image/baselines/parcats_numeric_sort.png new file mode 100644 index 00000000000..0701334d71c Binary files /dev/null and b/test/image/baselines/parcats_numeric_sort.png differ diff --git a/test/image/mocks/parcats_numeric_sort.json b/test/image/mocks/parcats_numeric_sort.json new file mode 100644 index 00000000000..01c4593a86e --- /dev/null +++ b/test/image/mocks/parcats_numeric_sort.json @@ -0,0 +1,40 @@ +{ + "data": [ + { + "type": "parcats", + "dimensions": [ + { + "label": "A", + "values": [ + 1, + 2, + 3 + ], + "categoryorder": "category ascending" + }, + { + "label": "B", + "values": [ + 9, + 10, + 11 + ], + "categoryorder": "category ascending" + } + ] + } + ], + "layout": { + "width": 320, + "height": 200, + "margin": { + "t": 20, + "b": 20, + "l": 20, + "r": 20 + }, + "font": { + "size": 16 + } + } +} diff --git a/test/jasmine/tests/mock_test.js b/test/jasmine/tests/mock_test.js index 22e54a4a04c..eb7abbbfa29 100644 --- a/test/jasmine/tests/mock_test.js +++ b/test/jasmine/tests/mock_test.js @@ -743,6 +743,7 @@ var list = [ 'parcats_hoveron_color', 'parcats_hoveron_dimension', 'parcats_invisible_dimension', + 'parcats_numeric_sort', 'parcats_reordered', 'parcats_unbundled', 'percent_error_bar', @@ -1785,6 +1786,7 @@ figs['parcats_grid_subplots'] = require('@mocks/parcats_grid_subplots'); figs['parcats_hoveron_color'] = require('@mocks/parcats_hoveron_color'); figs['parcats_hoveron_dimension'] = require('@mocks/parcats_hoveron_dimension'); figs['parcats_invisible_dimension'] = require('@mocks/parcats_invisible_dimension'); +figs['parcats_numeric_sort'] = require('@mocks/parcats_numeric_sort'); figs['parcats_reordered'] = require('@mocks/parcats_reordered'); figs['parcats_unbundled'] = require('@mocks/parcats_unbundled'); figs['percent_error_bar'] = require('@mocks/percent_error_bar');