2016-11-26 95 views
1

在这里,我有一个简单的图形演示问题节点:添加边缘折叠以COSE布局

var cy = cytoscape({ 
    container: document.getElementById("stage"), 
    elements: [{ 
     data: {id: "a", value: 0} 
    }, { 
     data: {id: "b", value: 1} 
    }, { 
     data: {id: "ab", source: "a", target: "b", weight: 10} 
    }, { 
     data: {id: "c", value: 2} 
    }], 
    style: [{ 
     selector: "node", 
     style: { 
      content: "data(id)", 
      "text-valign": "center", 
      color: "white", 
      "background-color": "mapData(value, 0, 2, red, blue)" 
     } 
    }], 
    layout: { 
     name: "cose" 
    } 
}); 

出于某种原因,如果我添加两个节点之间的边缘,这两个节点将折叠到一起(放置在顶部彼此的)。继CoSE demo on GitHub后,我不知道为什么会发生。有任何想法吗?

演示的问题:https://jsfiddle.net/DerekL/mthg1uv5/

应该有三个节点:abc,但ab被放置在彼此的顶部上。将节点b拖出,您可以看到它下面的节点a

回答

1

不确定这是否符合您的要求,但开启随机化似乎可以解决问题。

像这样:

layout: { 
    name: "cose", 
    randomize: true 
} 

您也可以通过更改布局类型修复它 - 我想“breadthfirst”,它没有问题。我不是很精通,足以解释为什么葡萄糖不能如你所愿地工作,但希望这有助于。从我的研究来看,每个人似乎都赞美这种胶芯布局是一种替代品,所以可能值得看看它是否能满足您的需求。

+0

不是一个坏的解决方案,谢谢, –

+0

默认情况下,CoSE Bilkent只有'randomize:true' - 不同于其他任何力指向的布局。如果不指定随机化,并且所有节点具有相同的初始位置,则节点之间的距离为零,并且强制定向布局自然不会移动节点。 – maxkfranz

+0

CoSE Bilkent以较少的配置产生更好的输出,但它比CoSE的包含版本要贵得多。 – maxkfranz