我已经构建了一个水平条形图,其中条形图基于一组不同的标准(存储为数组)。虽然我可以让条形图对我似乎无法做的事情进行排序,但让 y 轴重新绘制或重新排序以符合图表的条形图。
这是现在的页面: 在此处输入链接描述
下面是编写标签和排序条的代码:
var yAxisLabelNames = d3.scale.ordinal()
.domain(dataset.map(function(d){
return d.name;}))
.rangeRoundBands([padding, h - padding], 0.05);
var yAxis = d3.svg.axis()
.scale(yAxisLabelNames)
.orient("left");
svg.append("g")
.attr("class", "y axis")
.attr("transform", "translate(" + padding + ",0)")
.call(yAxis);
和我的排序功能之一:
d3.select("#patchCompetition")
.on("click", function(){
svg.selectAll("rect.bars")
.sort(function(a, b){
return d3.ascending(a.values[4], b.values[4])
})
.transition()
.delay(function(d, i){
return i *50;
})
.duration(1000)
.attr("y", function(d, i) {
return yScale(i)
});
svg.selectAll(".labels")
.sort(function(a, b){
return d3.ascending(a.values[4], b.values[4])
})
.transition()
.delay(function(d, i){
return i * 50;
})
.duration(1000)
.attr("text-anchor", "middle")
.attr("y", function(d, i) {
return yScale(i) +yScale.rangeBand() /2 +4;
});
svg.select(".y axis").call(yAxis);
});