Gibt es eine äquivalente Implementierung eines Bubble Tree in D3? In dem von mir bereitgestellten Link wurde der Bubble Tree in RaphaelJS und jQuery implementiert.Bubble Baum in d3?
Antwort
Die direkte Antwort auf Ihre Frage lautet: Nein.
Verwenden Sie die Ressourcen unter https://github.com/okfn/bubbletree/tree/master/build, die Informationen, die Sie bereits kennen, und die Informationen auf http://d3js.org/ und durch D3-Dokumentation auf GitHub, sollten Sie in der Lage sein, Ihre eigenen Blase Baum für D3 zu zaubern!
Dies ist ein Stück von JavaScript ich vor langer Zeit verwendet, um binäre Baumdaten zu visualisieren:
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());
};
einfach ein paar kreisförmige Elemente einfügen und es ein wenig Stil in einem kreisförmigen Herren manipulieren und Sie sollten ein haben gutes Programm!
Sie missverstehen. Ein bubble * tree * ist eine Möglichkeit, hierarchische Daten zu visualisieren; es hat nichts mit Blasensortieren zu tun. :) –
Woops; Lass mich den Post dann bearbeiten! : P – T145
Sie können the pack layout verwenden, im Grunde können Sie alle gewünschten Daten an die Formen im Diagramm und benutzerdefinierte Parameter binden, damit sie sich gegenseitig gut positionieren. Eine andere Alternative wäre das Kraftlayout.
Hier gehen Sie. Ich habe Fügen Sie nicht den Text oder Dekorationen, aber es ist das Fleisch und Kartoffeln:
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>
- 1. D3 Baum vertikale Trennung
- 2. D3 Baum Level Selector
- 3. Ein zusammenklappbarer Baum in D3.js
- 4. Baum/Dendrogramm mit Winkelverbinder in d3
- 5. D3 Baum/Cluster Diagramm - Ändern Knoten Farbe
- 6. D3 Baum: Linien statt diagonaler Projektion
- 7. Hinzufügen Markierung auf d3 Baum Layout verbindet
- 8. d3.js Eingedrückter Baum mit geraden Verbindungen
- 9. d3.js v4 verrückter Linkübergang in reduzierbarem Baum Beispiel
- 10. Erstellen von D3-Baum aus JSON mit ScalaJS
- 11. d3.js wie Knoten dynamisch zu einem Baum hinzufügen
- 12. d3 baum <g> tag padding/border overall styling
- 13. D3.js Baum Alles erweitern und Alles ausblenden
- 14. D3.js: Erweitern Sie den Baum bis zum Knoten
- 15. D3.js feste Breite Baum mit begrenzten Vertiefung
- 16. Wie in D3.js
- 17. Bubble EditText kontaktieren
- 18. Google Maps Bubble Templates
- 19. Bubble Sort rekursiv
- 20. Kivy Bubble arrow Unschärfe
- 21. Optimized Bubble Sort (Java)
- 22. Multithreading, parallele Bubble Sortierung
- 23. jQuery Slider bubble
- 24. WP7 Pushpin Tooltip/bubble
- 25. Bubble Sortiere seltsames Verhalten
- 26. bubble sort komplexity analysis
- 27. bubble sort mit Linkliste
- 28. Basic Highcharts Bubble Drilldown
- 29. Javascript: Bubble Sort
- 30. Bubble sortierende Zufallszahlen
Sie bereits das Web durchsucht Angenommen, ich denke, die Chancen Ihrer Frage hier in der Art und Weise beantwortet werden Sie Wollen sind ziemlich schlank. Ich denke, dass ein Bubble Chart mit D3 perfekt in den Bereich der Möglichkeiten passt ... Warum versuchst du nicht, einen zu erstellen und dann Fragen zu den Herausforderungen zu stellen, auf die du dabei stößt? – mbeasley
@mbeasley: Ich habe schon angefangen. Aber ich lasse diese Frage bestehen. In fast allen meinen vorherigen Fragen war ich überrascht, als mich jemand auf eine bestehende Implementierung in einem kleinen Wiki irgendwo hinwies :) – Legend
Fair genug. Stellen Sie sicher, dass Sie hier einen Link zur Implementierung bereitstellen, wenn Sie diese teilen möchten. Das wäre toll in D3 zu sehen! Viel Glück – mbeasley