Текущее решение, к которому я пришел, - это программно добавить атрибут _calcTotal
к каждому объекту в chart.data
. Значение этого атрибута вычисляется путем сложения всех значений всех атрибутов значения-данных.
например, когда один элемент данных выглядит следующим образом:
{
country: 'Germany',
femaleVisitors: 2550,
maleVisitors: 6029
}
и две составные серии для maleVisitors
и femaleVisitors
создаются, то обновленный элемент данных будет выглядеть так:
{
country: 'Germany',
femaleVisitors: 2550,
maleVisitors: 6029,
_calcTotal: 8579
}
Эти вычисления могут быть выполнены, например, когда начинается событие beforedatavalidated
и каждый раз, когда вы обновляете данные . Затем мы создаем новую серию столбцов с _calcTotal
в качестве поля данных-значений и устанавливаем атрибут hidden
в этой серии на true
.
Теперь эту серию можно использовать для сортировки с помощью categoryAxis.sortBySeries
свойство.
Однако amcharts не сортирует категории изначально, когда указанная сортировочная серия скрыта и используется много разных категорий (> ~ 15). Обходной путь - вызвать invalidateRawData
, когда диаграмма запускает событие ready
. Это приводит к грязной начальной анимации сортировки, но лучше, чем ничего.
JSFiddle: https://jsfiddle.net/0nr3g6es/1/