Javascript 如何对分组条形图进行排序d3js v4

Javascript 如何对分组条形图进行排序d3js v4,javascript,d3.js,Javascript,D3.js,在这个修复程序中,我尝试以类似于的方式执行排序功能 从技术上讲,它对条进行排序,但不是按照预期的方式,如果您选中排序复选框和轮班年份,您可以了解我的意思 我认为这与这样一个事实有关,即它只是基于数据排序,而不是键和/或复制变量,但我尝试了基于上述变量的各种排序方法,但没有成功 不知道我错过了什么,谢谢你的帮助 给你!您以前的代码中不需要太多更改 因此,这与BarGroup的数据绑定有关。每次对数据进行排序或更改时,都会将新数据绑定到g.layer,并且使用d3的更新方法,这就是它的工作方式 新代

在这个修复程序中,我尝试以类似于的方式执行排序功能

从技术上讲,它对条进行排序,但不是按照预期的方式,如果您选中排序复选框和轮班年份,您可以了解我的意思

我认为这与这样一个事实有关,即它只是基于数据排序,而不是键和/或复制变量,但我尝试了基于上述变量的各种排序方法,但没有成功


不知道我错过了什么,谢谢你的帮助

给你!您以前的代码中不需要太多更改

因此,这与BarGroup的数据绑定有关。每次对数据进行排序或更改时,都会将新数据绑定到g.layer,并且使用d3的更新方法,这就是它的工作方式

新代码的更改:

将barGroups代码移到数据排序上方,不带转换属性。 定义x0域后,将变换属性添加到组中。 相关代码:

在排序功能上方:

// bars
let barGroups = g.selectAll("g.layer").data(data);
barGroups.enter().append("g")
  .classed('layer', true);

barGroups.exit().remove();
设置x0域后:

g.selectAll("g.layer").transition().duration(Globalvar.durations)
  .attr("transform", function(d, i) {
    return "translate(" + x0(d.State) + ",0)";
  });

希望这有帮助!:

看起来你是按总值排序的,根据这个,这些条看起来是正确的。您是否希望每个组的条形图也根据其值进行排序?正如我在问题中提到的,条形图在技术上是排序的,但与另一个示例中的排序方式不同。更新数据并切换排序复选框时,这些条不会像切换复选框并更新数据时那样移动x位置。至于你的问题,不,只对按各组总价值排序感兴趣。希望我说的有道理。是的,罗伯特!我得到了它。我的错。我会尽快添加一个带有解决方案的链接!杰出的谢谢你的解释。