我尝试创建一个动态sunburst图表,它会缩放选定的弧线并隐藏其他弧线。这很有效,只要我避免使用大于0的arc.cornerRadius()。
我在(attrTween)arcTween函数中记录了生成的弧,输出对我来说似乎是正确的,但是跟随svg路径不同,其中第二个导致d3.min.js中的错误:5。
正确路径:
M0,58.528989440000004A58.528989440000004,58.528989440000004 0 1,1 0,-58.528989440000004A58.528989440000004,58.528989440000004 0 1,1 0,58.528989440000004M0,55A55,55 0 1,0 0,-55A55,55 0 1,0 0,55Z
错误路径:
M0,55.73917966222222A55.73917966222222,55.73917966222222 0 1,1 0,-55.73917966222222A55.73917966222222,55.73917966222222 0 1,1 0,55.73917966222222M0,55A55,55 0 1,0 0,-55A55,55 0 1,0 0,55Z
这是我设置半径的方法:
var graphMaxRadius = 83;
var innerBtnRadius = 55;
var arc = d3.svg.arc()
.startAngle(function(d) { return Math.max(0, Math.min(2 * Math.PI, xScale(d.x))); })
.endAngle(function(d) { return Math.max(0, Math.min(2 * Math.PI, xScale(d.x + d.dx))); })
.innerRadius(function(d) { return Math.max(innerBtnRadius, yScale(d.y)); })
.outerRadius(function(d) { return Math.max(0, Math.min(yScale(d.y + d.dy), graphMaxRadius)); })
.cornerRadius(function(d) { return 10;});
我的第一个猜测是,cornerRadius与隐藏弧相冲突,无效的svg发生,所以我尝试了各种尺寸。但一切都> 0导致错误,输出为:
M0,55A55,55 0 1,1 0,-55A55,55 0 1,1 0,55M0,50.006635519999996A50.006635519999996,50.006635519999996 0 1,0 0,-50.006635519999996A50.006635519999996,50.006635519999996 0 1,0 0,50.006635519999996Z
d3.min.js:5 Error: Invalid value for <path> attribute d="MNaN,NaNANaN,NaN 0 1,1 NaN,NaNLNaN,NaNANaN,NaN 0 0,1 NaN,NaNZ"
d3.min.js:5 (anonymous function)
d3.min.js:3 l
d3.min.js:1 Lt
d3.min.js:1 qt
这是我的arcTween函数(编辑与github issue上的mbostok相对应):
return function arcTween(d) {
var xd = d3.interpolate(xScale.domain(), [d.x, d.x + d.dx]);
var yd = d3.interpolate(yScale.domain(), [d.y, d.y + d.dy]);
var selectionRadius = innerBtnRadius - 5;
//radius -5 reduces width of inner circle and selection rim
var yr = d3.interpolate(yScale.range(), [d.y ? selectionRadius : innerBtnRadius, radius-5]);
return function(d, i) {
return i
? function(t) { return arc(d); }
: function(t) { xScale.domain(xd(t)); yScale.domain(yd(t)).range(yr(t)); return arc(d); };
};
}
请问,我接下来可以检查什么?
P.S。 sry,没有jsfiddle因为他们目前没有安装d3 v3.5 (我错过了数据导入)。我的代码在此处重复使用示例:zoomable sunburst
这是d3.js lib中发生错误的断点的屏幕截图,但我仍然不知道:
答案 0 :(得分:4)
请记住,cornerRadius是D3分区布局的一个相对较新的功能,因此可能仍然存在一些与之相关的错误。
但是,我的印象是你的问题不存在。
根据您关联的示例,我创建了一个小codepen。
它与示例相同,只是它使用较小的数据集,并将数据保存在脚本本身中,而不是保存在JSON文件中。
此外,我整合了cornerRadius,检查了各种值 - 并且一切都像魅力一样,如下图所示。
我无法集成您的补间功能,因为其余代码中缺少一些位和和平。
因此,您需要检查并重写代码,尤其是与arcTween()相关的任何内容。
在我的示例中说明有效执行的屏幕截图:
cornerRadius
是5:
cornerRadius
是20:
cornerRadius
是100: