7

मैं एक बल लेआउट का उपयोग कर एक फोर्स निर्देशित ग्राफ बनाने में सक्षम हूं। अधिकांश सुविधाएं बहुत बढ़िया काम करती हैं लेकिन मेरे पास एक बड़ा मुद्दा यह है कि, लेआउट शुरू करने पर, यह कैनवास पर अपने स्थान पर बसने से पहले पूरे पृष्ठ (कैनवास सीमा के अंदर और बाहर) उछालता है।मैं डी 3 में फोर्स डायरेक्टेड ग्राफ की बाउंस एंट्री को कैसे नियंत्रित करूं?

मैं अल्फा का उपयोग कर इसे नियंत्रित करने की कोशिश की है, लेकिन यह काम करने के लिए प्रतीत नहीं होता:

// Create a force layout and bind Nodes and Links 
    var force = d3.layout.force() 
     .charge(-1000) 
     .nodes(nodeSet) 
     .links(linkSet) 
     .size([width/8, height/10]) 
     .linkDistance(function(d) { if (width < height) { return width*1/3; } else { return height*1/3 } }) // Controls edge length 
     .on("tick", tick) 
     .alpha(-5) // <---------------- HERE 
     .start(); 

किसी को भी पता है कैसे ठीक इसके एसवीजी कैनवास में एक सेना के लेआउट के प्रवेश को नियंत्रित करने?

मुझे धीरे-धीरे ग्राफ में फ्लोटिंग और बसने का ध्यान नहीं दिखेगा लेकिन पूरे ग्राफ का पागल उछाल आकर्षक नहीं है। http://bl.ocks.org/Guerino1/2879486enter link description here

आप की पेशकश कर सकते हैं किसी भी मदद के लिए धन्यवाद:

Btw, Force Directed Graph उदाहरण में पाया जा सकता!

+0

क्या आपको कभी इस प्रश्न का उत्तर मिला? मुझे भी यही समस्या हो रही है। – Braden

उत्तर

2

मैं भी इस समस्या के बारे में सोच रहा हूं और यह वह समाधान है जिसके साथ मैं आया हूं। मैंने फोर्स लेआउट को ऑफ़लाइन टिकने के लिए नोडजेज़ का इस्तेमाल किया और परिणामी नोड्स डेटा को जेएसएस फ़ाइल में सेव किया। मैंने लेआउट के लिए नई जेसन फ़ाइल के रूप में उपयोग किया। मुझे सच में यकीन नहीं है कि यह ईमानदार होने के लिए बेहतर काम करता है। मैं आपको ढूंढने वाले किसी भी समाधान के बारे में सुनना चाहता हूं।

5

नोड्स को यादृच्छिक स्थिति के साथ प्रारंभ किया जाता है। प्रलेखन से: "यदि आप मैन्युअल रूप से पदों को प्रारंभ नहीं करते हैं, तो बल लेआउट उन्हें यादृच्छिक रूप से प्रारंभ करेगा, जिसके परिणामस्वरूप कुछ हद तक अप्रत्याशित व्यवहार होगा।" आप स्रोत कोड में देख सकते हैं:

// initialize node position based on first neighbor 
function position(dimension, size) { 
    ... 
    return Math.random() * size; 

वे कैनवास सीमा के अंदर हो जाएगा, पर वे बल द्वारा बाहर धक्का दे दिया जा सकता है।

  1. नोड्स कैनवास अंदर विवश किया जा सकता: आप कई समाधान है http://bl.ocks.org/mbostock/1129492
  2. अधिक प्रभारी शक्ति और कम लिंक, या अधिक घर्षण देखें, ताकि नोड्स कम
  3. आप चला सकते हैं बाउंस करने के लिए करते हैं नोड्स एनिमेट, केवल दिखा अंतिम परिणाम के बिना अनुकरण http://bl.ocks.org/mbostock/1667139
  4. आप नोड्स स्थिति https://github.com/mbostock/d3/wiki/Force-Layout#wiki-nodes प्रारंभ कर सकते हैं (लेकिन यदि आप उन सब को केंद्र पर जगह, प्रतिकर्षण विशाल हो जाएगा और ग्राफ अभी भी अधिक विस्फोट हो जाएगा):

var n = nodes.length; nodes.forEach(function(d, i) { 
    d.x = d.y = width/n * i; }); 
+0

ये सभी विकल्प बहुत अनिश्चित प्रतीत होते हैं और काम करने की गारंटी नहीं देते हैं यदि लिंक/रिश्तों की संख्या किसी एक प्रतिपादन से दूसरे में बदल जाती है। मेरे पास ऐसे मामले होंगे जहां विज़ुअलाइजेशन में शून्य लिंक होंगे और हजारों लिंक (सभी केंद्र/फोकल नोड से बाहर) के साथ अन्य चरम सीमाएं होंगी। प्रत्येक चरम और बीच में सब कुछ के लिए लगातार ग्राफ स्थिरीकरण सुनिश्चित करने के लिए कोई विचार है? धन्यवाद। –

संबंधित मुद्दे