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 进行了相应的调整。
您必须执行以下操作:
您对组内类别进行排序(在示例中是 d.ages 数组)
d.ages.sort(function(a, b) { return d3.ascending(a.value, b.value); });
x1 是组内类别的比例。不是将类别映射到相同的相对位置,而是将排序数组的索引映射到 x 位置。 d3.range() 创建一个数组,这是您的域。
x1.domain(d3.range(0, data[0].ages.length)).rangeRoundBands([0, x0.rangeBand()]);
画图的时候只调用索引而不是类目
.attr("x", function(d, i) { return x1(i); })
完整的工作示例是 here。
我还添加了如何对组进行排序。
取this simple grouped column chart。数据值以这种格式传递:
{
"Group1": [group1_subvalue1, group1_subvalue2.....],
"Group2": [group2_subvalue1, group2_subvalue2.....],
....
}
我想单独对每个组进行排序,即:对于每个州,将列从高到窄排序。但我无法找到一种方法来做到这一点。在给定的示例中,每个组的数组必须按相同顺序排列(首先是 5 岁以下的人 y.o,之后是 5 到 13 岁,依此类推),所以我不知道如何面对这个问题。
为了展示如何单独对每个组进行排序,我 Mike Bostock's example 进行了相应的调整。 您必须执行以下操作:
您对组内类别进行排序(在示例中是 d.ages 数组)
d.ages.sort(function(a, b) { return d3.ascending(a.value, b.value); });
x1 是组内类别的比例。不是将类别映射到相同的相对位置,而是将排序数组的索引映射到 x 位置。 d3.range() 创建一个数组,这是您的域。
x1.domain(d3.range(0, data[0].ages.length)).rangeRoundBands([0, x0.rangeBand()]);
画图的时候只调用索引而不是类目
.attr("x", function(d, i) { return x1(i); })
完整的工作示例是 here。 我还添加了如何对组进行排序。