如何按值而不是键对 dc.js 饼图进行排序

How to sort a dc.js pie chart by its values instead of by its keys

默认排序嵌入dc.js:

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

我想覆盖此默认值并按值而不是键排序。

是否有我缺少的函数可以执行此操作,或者是否有办法使用 d3 select 图表并使用类似这样的方法进行排序:

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

我不太熟悉 dc.js,但是 dc.pieLayout 中的 returned 对象实际上是一个饼图生成器。这意味着您始终可以通过在 return 值上调用 .sort() 来覆盖 returned 对象的属性:

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

这将覆盖 dc.js

设置的默认值

在dc.js中,排序是通过BaseMixin.ordering()处理的。

您引用的行禁用了 D3 的排序,因为 dc.js 已经对数据进行了排序。 (看起来像 pie.sort already defaults to null,所以这可能是多余的。)

所有 CapMixin 图表(饼图和行)的默认设置是从最大值到最小值排序。 (从馅饼的顶部顺时针方向。)

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

source

如果您看到按字母顺序排列,可能的原因是您的组归约值是对象,它将在上述表达式中强制转换为 NaN。排序失败,group.all() 排序被保留,which is by key。如果是这种情况,您可能需要

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