2013-02-14 13 views
24

क्या डी 3 में Bubble Tree का समकक्ष कार्यान्वयन है? मेरे द्वारा प्रदान किए गए लिंक में, बबल ट्री को राफेलजेएस और jQuery में कार्यान्वित किया गया था।डी 3 में बुलबुला पेड़?

enter image description here

+9

मान लिया जाये कि आप पहले से ही वेब खोज की है, मुझे लगता है कि आपके प्रश्न के हालात रास्ते में यहाँ उत्तर दिया जा रहा आप चाहते हैं बहुत पतले हैं। मुझे लगता है कि एक बबल चार्ट पूरी तरह से डी 3 के साथ संभावनाओं के दायरे में है ... आप कोशिश क्यों नहीं करते हैं और एक बनाने शुरू करते हैं और फिर आप ऐसा करने में आने वाली चुनौतियों के आसपास प्रश्न पूछते हैं? – mbeasley

+6

@mbeasley: मैंने पहले से ही शुरू कर दिया है। लेकिन मैं इस सवाल को रहने दे रहा हूं। लगभग सभी मेरे पिछले प्रश्नों में, मुझे आश्चर्य हुआ जब किसी ने मुझे एक छोटे विकी के अंदर छुपा एक मौजूदा कार्यान्वयन की ओर इशारा किया :) – Legend

+0

पर्याप्त मेला। यदि आप इसे साझा करना चाहते हैं तो कार्यान्वयन के लिए यहां एक लिंक पोस्ट करना सुनिश्चित करें। डी 3 में देखना अच्छा होगा! शुभकामनाएं – mbeasley

उत्तर

1

आपके सवाल का सीधे जवाब नहीं है।

https://github.com/okfn/bubbletree/tree/master/build पर संसाधनों का उपयोग करना, जानकारी आप पहले से ही जानते हैं, और http://d3js.org/ पर और GitHub पर डी 3 के प्रलेखन के माध्यम से उपलब्ध कराई गई जानकारी, आप डी 3 के लिए अपने स्वयं के बुलबुला पेड़ जादू करने के लिए सक्षम होना चाहिए!

var updateVisual; 

updateVisual = function() { 
    var drawTree, out; 
    drawTree = function(out, node) { 
     var col, gray, i, line, lineElt, lines, sub, _results, _results1; 
     if (node.lines) { 
      out.appendChild(document.createElement("div")).innerHTML = "<b>leaf</b>: " + node.lines.length + " lines, " + Math.round(node.height) + " px"; 
      lines = out.appendChild(document.createElement("div")); 
      lines.style.lineHeight = "6px"; 
      lines.style.marginLeft = "10px"; 
      i = 0; 
      _results = []; 
      while (i < node.lines.length) { 
       line = node.lines[i]; 
       lineElt = lines.appendChild(document.createElement("div")); 
       lineElt.className = "lineblock"; 
       gray = Math.min(line.text.length * 3, 230); 
       col = gray.toString(16); 
       if (col.length === 1) col = "0" + col; 
       lineElt.style.background = "#" + col + col + col; 
       console.log(line.height, line); 
       lineElt.style.width = Math.max(Math.round(line.height/3), 1) + "px"; 
       _results.push(i++); 
      } 
      return _results; 
     } else { 
      out.appendChild(document.createElement("div")).innerHTML = "<b>node</b>: " + node.size + " lines, " + Math.round(node.height) + " px"; 
      sub = out.appendChild(document.createElement("div")); 
      sub.style.paddingLeft = "20px"; 
      i = 0; 
      _results1 = []; 
      while (i < node.children.length) { 
       drawTree(sub, node.children[i]); 
       _results1.push(++i); 
      } 
      return _results1; 
     } 
    }; 
    out = document.getElementById("btree-view"); 
    out.innerHTML = ""; 
    return drawTree(out, editor.getDoc()); 
}; 

बस कुछ परिपत्र तत्वों डालने और यह एक परिपत्र मनोर में शैली के लिए थोड़ा हेरफेर और आप एक होना चाहिए:

यह जावा स्क्रिप्ट का एक टुकड़ा मैं एक लंबे समय पहले इस्तेमाल किया द्विआधारी पेड़ डेटा कल्पना करने के लिए है अच्छा कार्यक्रम सेट!

+0

आप गलत समझते हैं। एक बुलबुला * पेड़ * पदानुक्रमित डेटा को देखने का एक तरीका है; इसमें बबल प्रकार के साथ कुछ लेना देना नहीं है। :) –

+0

वूप्स; मुझे तब पोस्ट संपादित करने दो! : पी – T145

0

आप the pack layout का उपयोग कर सकते हैं, मूल रूप से आप किसी भी डेटा को ग्राउंड में आकार और कस्टम पैरामीटर को एक-दूसरे के प्रति सम्मान करने के लिए बाध्य कर सकते हैं। एक और विकल्प बल लेआउट होगा।

0

यहां आप जाते हैं। मैं पाठ या सजावट में नहीं जोड़ा था, लेकिन यह मांस और आलू है:

function bubbleChart(config) { 
 
\t var aspectRatio = 1, 
 
     margin = { top: 0, right: 0, bottom: 0, left: 0 }, 
 
     radiusScale = d3.scale.sqrt(), 
 
     scan = function(f, data, a) { 
 
     a = a === undefined ? 0 : a; 
 
     var results = [a]; 
 
     data.forEach(function(d, i) { 
 
      a = f(a, d); 
 
      results.push(a); 
 
     }); 
 
     return results; 
 
     }, 
 
     colorScale = d3.scale.category20(), 
 
     result = function(selection) { 
 
\t \t selection.each(function(data) { 
 
\t \t \t var outerWidth = $(this).width(), 
 
      outerHeight = outerWidth/aspectRatio, 
 
      width = outerWidth - margin.left - margin.right, 
 
      height = outerHeight - margin.top - margin.bottom, 
 
      smallestDimension = Math.min(width, height), 
 
      sum = data[1].reduce(function(a, d) { 
 
      return a + d[1]; 
 
      }, 0), 
 
      radiusFractions = data[1].map(function(d) { 
 
      return Math.sqrt(d[1]/sum); 
 
      }), 
 
      radiusNormalSum = radiusFractions.reduce(function(a, d) { 
 
      return a + d; 
 
      }, 0), 
 
      scanned = scan(function(a, d) { 
 
      return a + d; 
 
      }, radiusFractions.map(function(d) { 
 
      return d/radiusNormalSum; 
 
      }), 0); 
 
\t \t \t radiusScale.domain([0, sum]).range([0, smallestDimension/6]); 
 
     var svg = d3.select(this).selectAll('svg').data([data]), 
 
      svgEnter = svg.enter().append('svg'); 
 
\t \t \t svg.attr('width', outerWidth).attr('height', outerHeight); 
 
\t \t \t var gEnter = svgEnter.append('g'), 
 
      g = svg.select('g').attr('transform', 'translate(' + margin.left + ' ' + margin.top + ')'), 
 
      circleRing = g.selectAll('circle.ring').data(data[1]), 
 
      circleRingEnter = circleRing.enter().append('circle').attr('class', 'ring'); 
 
     circleRing.attr('cx', function(d, i) { 
 
     return smallestDimension/3 * Math.cos(2 * Math.PI * (scanned[i] + scanned[i + 1])/2) + width/2; 
 
     }).attr('cy', function(d, i) { 
 
     return smallestDimension/3 * Math.sin(2 * Math.PI * (scanned[i] + scanned[i + 1])/2) + height/2; 
 
     }).attr('r', function(d) { 
 
     return radiusScale(d[1]); 
 
     }).style('fill', function(d) { 
 
     return colorScale(d[0]); 
 
     }); 
 
     var circleMain = g.selectAll('circle#main').data([data[0]]), 
 
      circleMainEnter = circleMain.enter().append('circle').attr('id', 'main'); 
 
     circleMain.attr('cx', width/2).attr('cy', height/2).attr('r', radiusScale(sum)).style('fill', function(d) { 
 
     return colorScale(d); 
 
     }); 
 
\t \t }); 
 
\t }; 
 
\t result.aspectRatio = function(value) { 
 
\t \t if(value === undefined) return aspectRatio; 
 
\t \t aspectRatio = value; 
 
\t \t return result; 
 
\t }; 
 
\t result.margin = function(value) { 
 
\t \t if(value === undefined) return margin; 
 
\t \t margin = value; 
 
\t \t return result; 
 
\t }; 
 
\t return result; 
 
} 
 

 
var myBubbleChart = bubbleChart().margin({ 
 
    top: 1, 
 
    right: 1, 
 
    bottom : 1, 
 
    left: 1 
 
}); 
 
var data = ['Random Names, Random Amounts', [['Immanuel', .4], ['Pascal', 42.9], ['Marisa', 3.3], ['Hadumod', 4.5], ['Folker', 3.2], ['Theo', 4.7], ['Barnabas', 1.0], ['Lysann', 11.1], ['Julia', .7], ['Burgis', 28.2]]]; 
 
d3.select('#here').datum(data).call(myBubbleChart);
<div class="container"> 
 
    <div class="row"> 
 
    <div class="col-xs-12"> 
 
     <div id="here"></div> 
 
    </div> 
 
    </div> 
 
</div> 
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>