首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >D3和弦图绘制不正确

D3和弦图绘制不正确
EN

Stack Overflow用户
提问于 2018-10-13 18:56:06
回答 1查看 55关注 0票数 0

使用纳迪赫·布雷默的优秀指南,我正在制作一个拉长的和弦图。但是,对于某些数据输入,呈现会出错。

我做了一个演示,在这里演示我的问题:https://codepen.io/benmayocode/pen/MPEwdr

具体来说,在.js文件行269至281个文件中,我有:

代码语言:javascript
复制
var respondents = 40,
    emptyPerc = 0.4,
    emptyStroke = Math.round(respondents*emptyPerc); 
var Names = ['BEN', 'ROSE', '', '1', '2', '6', ''];
var matrix = [
[0, 0, 0, 10, 10, 0, 0] ,
[0, 0, 0, 0, 10, 10, 0] ,
[0, 0, 0, 0, 0, 0, 24] ,
[10, 0, 0, 0, 0, 0, 0] ,
[10, 10, 0, 0, 0, 0, 0] ,
[0, 10, 0, 0, 0, 0, 0] ,
[0, 0, 0, 24, 0, 0, 0] ,
];

但如果我把它改成..。

代码语言:javascript
复制
var respondents = 40,
    emptyPerc = 0.4,
    emptyStroke = Math.round(respondents*emptyPerc); 
var Names = ['BEN', 'LIB', 'ROSE', '', '1', '2', '6', ''];
var matrix = [
[0, 0, 0, 0, 10, 10, 0, 0] ,
[0, 0, 0, 0, 0, 10, 0, 0] ,
[0, 0, 0, 0, 0, 10, 10, 0] ,
[0, 0, 0, 0, 0, 0, 0, 24] ,
[10, 0, 0, 0, 0, 0, 0, 0] ,
[10, 10, 10, 0, 0, 0, 0, 0] ,
[0, 0, 10, 0, 0, 0, 0, 0] ,
[0, 0, 0, 0, 24, 0, 0, 0] ,
];

那就好用了。我很明显地看到了这两个代码块之间的区别,但是它们为什么产生不同的结果,并且是否可以修改我的代码以适应这两个示例?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-13 21:16:55

如果您检查这个不可靠的弧线,您将看到您可以通过更改从(50,0)(-50,0)的转换上的符号,将其翻转到正确的位置。如果然后查看分配转换的代码,则如下所示

代码语言:javascript
复制
.attr("transform", function(d, i) {
    d.pullOutSize = pullOutSize * ( d.startAngle + 0.01 > Math.PI ? -1 : 1);
    return "translate(" + d.pullOutSize + ',' + 0 + ")";
});

在原文中注明“0.01为四舍五入的错误”。考虑到startAngle已经是3.13--即非常接近Pi--看起来这是一个边缘情况,在这个情况下,这个值正好掉到了截止点的错误的一边。将允许的舍入误差值更改为0.02会使弧位于正确的位置,或者您可以这样做

代码语言:javascript
复制
d.pullOutSize = pullOutSize * ( 
    // is the start angle less than Pi?
    d.startAngle + 0.01 < Math.PI ? 1 :
    // if yes, is the end angle also less than Pi?
        d.endAngle < Math.PI ? 1 : -1 );

以防止数据集中出现类似的边缘情况。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52796254

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档