【问题标题】:D3 Edge Bundling generates edge full length of svgD3边缘捆绑生成svg的边缘全长
【发布时间】:2015-12-11 08:11:42
【问题描述】:

我一直在制作一些情节,以这个美丽的 sn-p:non-hierarchical radial outlay with edge bundling 为基础,添加悬停和其他装饰。但是,我注意到,当向 sn-p 提供某些 json 文件时,它会生成跨越边缘附加到的 svg 的整个高度(或宽度)的边缘。这个fiddle 复制了 Chrome 中的问题。

在这个小提琴中,亚瑟和布兰奇之间的边跨越了 svg 的整个长度,而我希望边简单地连接亚瑟和布兰奇。一个朋友建议这个边缘的 JSON 可能不同,但它与 JSON 的其余部分是一致的。 (Arthur-Blanche JSON 在下面的第二个哈希表中表示):

{
  source: 5,
  target: 4,
  value: 1
},
{
  source: 5,
  target: 6,
  value: 5
},
{
  source: 5,
  target: 7,
  value: 2
},

有谁知道为什么这条边会显示在 SVG 的整个跨度上?

我想我可以破解路径以删除位于主圆半径之外的边缘段​​,但我很想了解导致这种奇怪行为的原因。如果其他人可以就这个问题提供任何帮助,我将不胜感激!

【问题讨论】:

    标签: javascript css json d3.js svg


    【解决方案1】:

    必须深入研究这个问题才能为您提供解决方案:)

    代替直线函数

    var line = d3.svg.line()
        .interpolate("basis")
        .x(function(d) { return d.x; })
        .y(function(d) { return d.y; });
    

    使y永远不超过直径的条件

    var line = d3.svg.line()
        .interpolate("basis")
        .x(function(d) {if(d.x<0 || d.x > diameter) {d.x=diameter} return d.x; })
        .y(function(d) {if(d.y<0 || d.y > diameter) {d.y=diameter} return d.y; });
    

    工作代码here

    希望这会有所帮助!

    【讨论】:

    • 谢谢@Cyril!不幸的是,提供给您更改的小提琴的其他 JSON 仍然会产生问题:/ 这是一个示例:jsfiddle.net/yo7a8t1d/10 我已将多个相同格式的 JSON 文件加载到 s3.amazonaws.com/duhaime-shakespeare/folger-gender + {fileName} + .json 中,其中 fileName 指的是任何这些值: 1H4 AYL H5 Lr Per TN WT 1H6 Ado H8 MM R2 TNK Wiv 2H4 Ant Ham MND R3 Tim 2H6 Cor JC MV Rom Tit 3H6 Cym Jn Mac Shr Tmp AWW Err LLL Oth TGV Tro
    • 更新了我上面的答案并摆弄这个应该钉它大声笑:)
    • 再次感谢@Cyril!我认为这更接近了,但是当我输入 "https://s3.amazonaws.com/duhaime-shakespeare/folger-gender/Tit.json" 时,我仍然会得到 svg 生成线。你知道为什么会这样吗?
    • 是的,因为您也必须对 x 执行相同的操作,将其限制在 500 半径内。这就是这个新的 JSOn 中的问题更新了我的答案和小提琴。手指交叉。 :)
    • 谢谢@Cyril。这纠正了像 Tit.json 这样的文件中较长的行,但我仍然试图找出是什么使这些行首先超出了节点。 (通过在页面加载时检查边缘,您可以看到最初在您的 sn-p 中是这样的)。您是否知道是什么导致这些行一开始就这么长?
    猜你喜欢
    • 1970-01-01
    • 2016-12-26
    • 1970-01-01
    • 2015-04-14
    • 2014-04-29
    • 2016-03-19
    • 1970-01-01
    • 2015-08-19
    相关资源
    最近更新 更多