2016-11-19 276 views
0

您好,我正在嘗試構建一個學校項目的網絡爬蟲可視化工具。我決定使用Cytoscape.js,它的使用非常好。我遇到的問題是某些佈局(圓形,寬度第一,同心)的邊緣長度似乎太大,圖形看起來很奇怪。Cytoscape.js佈局邊緣長度

當我第一次啓動該應用程序,我手工製作和負載的曲線(這是一個樹)有100個節點,並且看起來圓周佈置好: enter image description here

但是之後我進行網頁抓取新圖表(這一個有44個節點)不適合圓形視圖: enter image description here

有沒有辦法讓這個工作,以便邊緣不長,節點看起來更大?

編輯:

下面是我使用改變佈局的代碼:

changeLayout = function(layoutName, title, root){ 
       var numOfNodes = cy.filter('node').length; 
       //extent changes when I repeatedly change the layout to circle, (don't understand this behavior) 
       var extent = cy.extent(); 
       var rect = document.getElementById("cy-container").getBoundingClientRect(); 

       var x1 = rect.left; 
       var x2 = rect.right; 
       var y1 = rect.top; 
       var y2 = rect.bottom; 

       var height = (y2 - y1); 
       var width = (x2 - x1); 

       var fact = (height < width) ? (height/numOfNodes) : (width/numOfNodes); 
       fact *= 5; 
       var myRadius = height < width ? (height-fact) : (width-fact); 

       switch(layoutName){ 
         case 'circle': 
           myLayout = cy.makeLayout(
           {  name: layoutName, 
             radius: myRadius, 
             boundingBox: {x1: x1, x2: x2, y1: y1, y2: y2}, 
             fit: true, 
             avoidOverlap: false 
           }); 
           break; 
         case 'concentric': 
           myLayout = cy.makeLayout(
           {  name: layoutName, 
             height: height, 
             width: width, 
             fit: false, 
             avoidOverlap: true 
           }); 
           break; 
         case 'breadthfirst': 
           myLayout = cy.makeLayout(
           {  name: layoutName, 
             boundingBox: {x1: x1, x2: x2, y1: y1, y2: y2}, 
             fit: true, 
             roots: root, 
             avoidOverlap: false 
           }); 
           break; 
         default : 
           myLayout = cy.makeLayout(
           { 
             name: layoutName 
           }); 
       } 

       myLayout.run(); 
       $('#graphTitle').text(title + " Layout"); 
     }; 
+0

這可能是各種各樣的事情。它可能與佈局功能相關聯。你可以發佈你所有的cytoscape代碼,以便我們更好地理解這個問題嗎? –

回答

0

的邊緣的長度是節點的位置的函數。佈局設置位置,因此您必須設置佈局選項以使節點更接近。

對於力導向(物理模擬)佈局,您可以調整力。在其他佈局中,您可以調整間距值或強制實施邊界框以影響節點的展開方式。

+0

謝謝我注意到一些我不明白的東西, 我嘗試使用範圍設置邊界框,但是當我重複設置圓形或同心佈局時,我注意到cy.extent()保持不斷變化並導致節點看起來越來越小。所以我在容器中使用了getBoundingClientRect()方法。這似乎適用於圓圈和廣度,但同心圓看起來。對於同心,如果我轉而避免重疊,那麼節點似乎真的想堆疊在彼此之上。 – Boo

+0

如果不使用自動重疊避免,則必須將邊界框設置得足夠大,以便節點不會重疊。我們已經計劃了一些功能來使這個用例在未來的版本中變得更加容易,但是它們比優先級列表更遠一些。 [這一個](https://github.com/cytoscape/cytoscape.js/issues/1266)就足夠你的用例。如果你想爲它做一個PR,那將會非常感激,而且這個功能將會在下一個功能發佈中出現。 – maxkfranz

+0

當然,我很樂意做出公關,我該如何提出要求? – Boo