如何修复此条形图排序
How can I fix this bar chart sorting?
这是我目前面临的问题的JSFiddle。
基本上,我有一个对象数组,用于绘制一些条形。对数组进行排序后,我尝试相应地更新柱线的y
位置,但这不起作用。
所以,这是我用来绘制条形的比例:
var yScale = d3.scale.ordinal()
.domain(d3.range(0, numberOfBars))
.rangeBands([0, numberOfBars * barHeight]);
因此,如果我有 3 个柱线,并且一个柱线高 40px,那么我映射 0-3 => 0-120px。
接下来,我有一个函数,它使用此比例返回正确的y
位置:
var y = function(d, i) {
return yScale(i);
};
使用此 y
函数绘制条形后,我对数据数组进行排序并尝试重新绘制条形:
barsContainer.selectAll('.bar')
.data(chartData.users)
.transition()
.duration(750)
.delay(delay)
.attr('y', y); // Not working. I thought this would order the bars.
//.attr('y', 120); // This works though. It moves all the bars to this y.
这就是我难倒的地方。由于我对数组(chartData.users)进行了重新排序,并且由于条形与数据"连接",因此条形不应该根据数据在数组中的新位置更改其y
吗?
所以我弄清楚了问题所在。由于我正在对对象数组进行排序,D3.js 无法自行确定哪些数组对象与哪些 DOM 对象匹配。所以我必须创建一个键函数来识别对象:
var key = function(d) { return d.id }
然后,我所要做的就是使用此键函数调用data()
,然后order()
,因此 DOM 顺序与数组顺序匹配:
barsContainer.selectAll('.bar')
.data(chartData.users, key)
.order()
.transition()
.delay(delay)
.duration(750)
.attr('y', y);
这是工作JSFiddle。
你的小提琴很长。我建议将其缩减到最低限度,并寻求该特定点的帮助。
例如,尝试测试
console.log(chartData.users)
在声明图表数据后立即。它似乎与排序的相同,因此可能不是排序有问题。如果你自己做更多的工作,然后问一个更具体、更简洁的问题,你可能会得到更多的答案。
祝D3好运!
相关文章:
- 用chart.js绘制条形图
- d3.js用按钮更新条形图工具提示
- 添加新数据时D3.JS条形图列偏移量
- Chart.js条形图:网格颜色和隐藏标签
- 在条形图中呈现数据AngularJS,如何制作一个好的多条形图
- Chart.js 2.1.2条形图动画问题
- 如何在Extjs5中更改条形图的标签
- d3.js条形图转换无法正常工作
- 从数组在d3中创建条形图时出现问题
- 条形图元素的HTML5 JavaScript锚点
- d3.js组条形图不起作用
- 图表.js:条形图点击事件
- 如何使用chartjs设置条形图中每个条形图的颜色
- 对d3堆叠条形图的数据进行排序
- 如何在nvd3中对条形图进行排序
- D3中的排序条形图不起作用
- 如何修复此条形图排序
- d3.js条形图排序:can't弄清楚如何将x轴标签与条形图一起排序
- 排序d3.js堆叠条形图
- 在D3中排序条形图