Как отсортировать dc.js круговая диаграмма по ее значениям, а не по ее ключам

#d3.js #dc.js #crossfilter

#d3.js #dc.js #перекрестный фильтр

Вопрос:

Сортировка по умолчанию встроена в dc.js:

 function pieLayout () {
        return d3.pie().sort(null).value(_chart.cappedValueAccessor);
    }
  

Я хотел бы переопределить это значение по умолчанию и отсортировать по значению вместо ключа.

Есть ли функция, которую мне не хватает, которая сделает это, или есть способ выбрать диаграмму с помощью d3 и отсортировать, используя что-то вроде этого:

 d3.layout.pie().sort(null).value(function(d) { return d.freq; });
  

Ответ №1:

В dc.js , сортировка обрабатывается с помощью BaseMixin.ordering().

Строка, которую вы указали, отключает сортировку D3, потому что dc.js уже отсортировал данные. (Похоже, что по pie.sort умолчанию уже установлено значение null, так что это может быть излишним.)

По умолчанию для всех диаграмм CapMixin (круговых и рядных) используется сортировка от наибольшего значения к наименьшему. (По часовой стрелке сверху для круга.)

 this.ordering(kv => -kv.value);
  

Источник

Если вы видите алфавитный порядок, вероятная причина заключается в том, что ваша группа уменьшает значения объектов, которые приведут к NaN в приведенном выше выражении. Сортировка завершается ошибкой, и group.all() сортировка сохраняется, то есть по ключу. Если это так, вам может понадобиться что-то вроде

 pieChart.ordering(kv => -kv.value.freq)
  

Комментарии:

1. Спасибо за это. Я был идиотом и использовал: «.ordering(function (d) { return (d.value. Численность персонала). toFixed(2) });» и tofixed() возвращает форматированную строку.

Ответ №2:

Я не слишком знаком с dc.js , но возвращаемый объект на dc.pieLayout самом деле является генератором круговых диаграмм. Это означает, что вы всегда можете переопределить свойства возвращаемого объекта, вызвав .sort() возвращаемое значение:

 var pieLayout = dc.pieLayout()
    .sort(function(d) { return d.value });
  

Это переопределит значение по умолчанию, установленное dc.js