D3:订单分组柱形图

D3: Order grouped column chart

this simple grouped column chart。数据值以这种格式传递:

{
    "Group1": [group1_subvalue1, group1_subvalue2.....],
    "Group2": [group2_subvalue1, group2_subvalue2.....],
    ....
}

我想单独对每个组进行排序,即:对于每个州,将列从高到窄排序。但我无法找到一种方法来做到这一点。在给定的示例中,每个组的数组必须按相同顺序排列(首先是 5 岁以下的人 y.o,之后是 5 到 13 岁,依此类推),所以我不知道如何面对这个问题。

为了展示如何单独对每个组进行排序,我 Mike Bostock's example 进行了相应的调整。 您必须执行以下操作:

  1. 您对组内类别进行排序(在示例中是 d.ages 数组)

    d.ages.sort(function(a, b) { return d3.ascending(a.value, b.value); });
    
  2. x1 是组内类别的比例。不是将类别映射到相同的相对位置,而是将排序数组的索引映射到 x 位置。 d3.range() 创建一个数组,这是您的域。

    x1.domain(d3.range(0, data[0].ages.length)).rangeRoundBands([0, x0.rangeBand()]);
    
  3. 画图的时候只调用索引而不是类目

    .attr("x", function(d, i) { return x1(i); })
    

完整的工作示例是 here。 我还添加了如何对组进行排序。