Esiste un'implementazione equivalente di Bubble Tree in D3? Nel link che ho fornito, il Bubble Tree è stato implementato in RaphaelJS e jQuery.Albero bolla in d3?
risposta
La risposta chiara alla sua domanda è no.
Utilizzando le risorse a https://github.com/okfn/bubbletree/tree/master/build, le informazioni che si conosce già, e le informazioni fornite sul http://d3js.org/ e attraverso la documentazione di D3 su GitHub, si dovrebbe essere in grado di evocare il vostro albero bolla per D3!
Questo è un pezzo di codice JavaScript ho usato molto tempo fa di visualizzare dati binari albero:
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());
};
Basta inserire alcuni elementi circolari e manipolare un po 'per lo stile in un maniero circolare e si dovrebbe avere un buon programma impostato!
Hai frainteso. Un bubble * tree * è un modo di visualizzare i dati gerarchici; non ha niente a che fare con il bubble sort. :) –
Woops; fammi modificare il post allora! : P – T145
È possibile utilizzare the pack layout, in pratica è possibile associare tutti i dati che si desidera alle forme nel grafico e i parametri personalizzati affinché si posizionino bene l'uno rispetto all'altro. Un'altra alternativa sarebbe la disposizione della forza.
Ecco qui. non ho aggiunto il testo o le decorazioni, ma è la carne e le patate:
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. Esempio di bolla D3: cosa fa bubble.nodes()?
- 2. D3 albero separazione verticale
- 3. albero d3 - genitori che hanno figli uguali
- 4. d3.js Albero rientrato con collegamenti diritti
- 5. onFocus bolla in React
- 6. Come bolla angular2 evento personalizzato
- 7. Albero/dendrogramma con connettori a gomito in d3
- 8. D3.js, necessario evento click in d3.js
- 9. Creazione di un albero pieghevole D3.js dai dati CSV
- 10. Albero D3.js Espandi tutto e Comprimi tutto
- 11. Come creare un grafico ad albero interattivo con d3?
- 12. Albero D3: linee al posto della proiezione diagonale
- 13. Creare una bolla di chat in Android
- 14. Crea gerarchia da CSV in d3.js
- 15. Custom MKPinAnnotazione bolla di richiamo simile alla bolla di callout predefinita
- 16. Come creare un layout ad albero utilizzando i dati JSON in d3.v4 - senza stratify()
- 17. Come faccio a mostrare i matrimoni in un "albero genealogico" basato su d3.js?
- 18. d3.js v4 d3.layout.tree è stato rimosso?
- 19. Come si fa a creare una bolla?
- 20. Che cos'è una "bolla di fusione"?
- 21. Personalizzazione della bolla di callout MKAnnotation
- 22. ngTouch ngClick non lo fa bolla
- 23. Bolla di discorso CSS puro con bordo
- 24. Perché il pulsante non fa clic sull'evento "bolla su albero visivo" su StackPanel come afferma l'articolo MSDN?
- 25. Orientamento disegno albero
- 26. Bolla di chat per l'implementazione di Android in ListView
- 27. Visualizza sempre la bolla di valutazione in md-slider
- 28. Come mettere in bolla l'ordinamento di un array di stringhe?
- 29. d3.scale.linear() vs d3.scaleLinear()
- 30. Grafico zoom in D3
Supponendo che già cercato il web, credo che le probabilità della sua domanda di essere risposto qui nel modo in cui si voglio essere piuttosto magra. Penso che un grafico a bolle sia perfettamente nel regno delle possibilità con D3 ... Perché non provi a crearne uno e poi a porre domande sulle sfide che incontrerai nel farlo? – mbeasley
@mbeasley: ho già iniziato. Ma sto lasciando che questa domanda rimanga. In quasi tutte le mie precedenti domande, sono rimasto sorpreso quando qualcuno mi ha indirizzato a un'implementazione esistente nascosta all'interno di un piccolo wiki da qualche parte :) – Legend
Abbastanza giusto. Assicurati di pubblicare un link qui per l'implementazione se hai voglia di condividerlo. Sarebbe bello vederlo in D3! Buona fortuna – mbeasley