d3.js - tickformat - d3 seleccionarAll: contar resultados
d3 svg axis (3)
¿Cómo cuento cuántos nodos se combinaron con un selectAll? (sin datos unidos)
O si hay datos, ¿cómo contar los datos de la selección? (Supongo que lo he configurado con "datos (función ...)", por lo que no sé la longitud de antemano)
Para obtener el recuento de datos, luego de .selectAll () y .data (), parece que se necesita .enter () antes de .size ():
legend_count = legendBoxG.selectAll("legend.box")
.data(curNodesData, (d) -> d.id)
.enter()
.size()
Sin el .enter (), el resultado es 0. El .enter () hace que devuelva el conteo de datos. (El código de arriba se muestra en el dialecto del café.)
Necesito obtener el recuento antes de agregar atributos a mis objetos svg (para poder escalarlos correctamente), y ninguno de los ejemplos anteriores hizo eso. Sin embargo, parece que no puedo agregar más atributos después de eliminar el conteo en una variable como la anterior. Entonces, si bien el enfoque anterior demuestra el funcionamiento de los datos () y enter () no es realmente una solución práctica. Lo que hago en cambio es obtener la longitud de la matriz de datos antes de hacer el selectAll (). Lo puedo hacer de manera más simple con la propiedad de longitud (no una función) en la propia matriz de datos:
legend_count = curNodesData.length
Simplemente use d3.selectAll(data).size()
Espero que este ejemplo le ayude a:
var matrix = [
[11975, 5871, 8916, 2868],
[ 1951, 10048, 2060, 6171],
[ 8010, 16145, 8090, 8045],
[ 1013, 990, 940, 6907]
];
var tr = d3.select("body").append("table").selectAll("tr")
.data(matrix)
.enter().append("tr");
var td = tr.selectAll("td")
.data(function(d) { return d; })
.enter().append("td")
.text(function(d) { return d; });
var tdSize=tr.selectAll("td").size();
Completa jsfiddle here .
Una forma en que lo he hecho anteriormente es pasar esa información a la función de datos creando un nuevo objeto.
.data(function(d) {
return d.Objects.map(function(obj) {
return {
Object: obj,
TotalObjects: d.Objects.length
}
});
Luego, en sus partes de actualización, usa Objeto y aún tiene el conteo disponible.
.attr("x", function(d) {
return d.Object.X;
})
.attr("y", function(d) {
return d.TotalObjects;
})