饼(甜甜圈)图分段顺序在D3
Pie (donut) chart segment order in D3
我使用d3构建了一个甜甜圈图表,其中包含一个jQuery滑块,允许用户在不同的数据点之间进行选择。图表显示了数据值之间的转换,一切正常。
问题:片段总是呈现逆时针大小顺序(从最大到最小)。这意味着分段会根据其大小在图表中切换位置。
这种行为让用户感到困惑,但不幸的是,我不知道如何改变它。我希望片段保持在它们的初始位置。
Working js-fiddle: http://jsfiddle.net/kerplunk/Q3dhh/
我认为问题一定在于执行渐变的函数:
// Interpolate the arcs in data space.
function pieTween(d, i) {
var s0;
var e0;
if(oldPieData[i]){
s0 = oldPieData[i].startAngle;
e0 = oldPieData[i].endAngle;
} else if (!(oldPieData[i]) && oldPieData[i-1]) {
s0 = oldPieData[i-1].endAngle;
e0 = oldPieData[i-1].endAngle;
} else if(!(oldPieData[i-1]) && oldPieData.length > 0){
s0 = oldPieData[oldPieData.length-1].endAngle;
e0 = oldPieData[oldPieData.length-1].endAngle;
} else {
s0 = 0;
e0 = 0;
}
var i = d3.interpolate({startAngle: s0, endAngle: e0}, {startAngle: d.startAngle, endAngle: d.endAngle});
return function(t) {
var b = i(t);
return arc(b);
};
}
d3自动按值对饼状图进行排序。幸运的是,禁用排序非常容易,只需在donut
函数上使用sort(null)
方法,即:
var donut = d3.layout.pie().value(function(d){
return d.itemValue;
}).sort(null);
给你一把小提琴
在d3 V4中这也是有效的语法(没有.layout
):
d3.pie()
.value(function(d) { return d.value; })
.sort(null)
相关文章:
- D3在一个调用中绘制不同的SVG形状,没有可见性
- ajax请求的顺序总是不同的
- 按照选项卡索引的顺序循环一个jQuery选择
- 为什么在单独的函数中应用时转换会闪烁/断断续续(D3)
- 如何在d3.js中返回路径的y坐标
- 匹配一个单词,其中候选人可以跨越顺序组(跨度)
- d3基于用户选择动态更新节点
- 如何使d3.js树布局按字母顺序对节点进行排序
- D3 编码顺序
- 使用d3.js对元素(<g>)进行分组的渲染顺序
- d3.js:对代码执行顺序的困惑
- d3.js中的渲染顺序
- 使用D3的静态xAxis顺序
- 饼(甜甜圈)图分段顺序在D3
- d3.js如何按照指定的顺序列出列
- d3.文本按顺序运行
- 保持元素顺序(select .order)与退出转换在d3
- D3以可预测的顺序强制布局节点
- d3.js:按时间顺序排列的时间视图
- 通过Array(JavaScript,D3)按照给定的顺序对JSON进行排序