esto puede aclarar el aspecto anidada, además de mbostock respuesta bien.
Sus datos tienen 2 grados de anidamiento. Tienes una matriz de 2 objetos, cada uno tiene una matriz de enteros. Si quieres que tu imagen final refleje estas diferencias, debes unirte a cada una.
Aquí hay una solución: cada usuario está representado por un elemento de grupo g
, con cada puntuación representada por rect
. Puede hacer esto de varias maneras: use datum
en el svg, luego una función de identidad en cada g
, o puede unir directamente los datos en el g
.Usando data
en el g
es más típico, pero aquí hay dos maneras:
Uso de referencia en el SVG:
var chart = d3.select('body').append('svg')
.datum(data) // <---- datum
.attr('width',800)
.attr('height',350)
.selectAll('g')
.data(function(d){ return d; }) // <----- identity function
.enter().append('g')
.attr('class', function(d) { return d.user; })
.attr('transform', function(d, i) { return 'translate(0, ' + i * 140 + ')'; })
.selectAll('rect')
.data(function(d) { return d.scores; })
.enter().append('rect')
.attr('y', function(d, i) { return i * 20; })
.attr('width', function(d) { return d; })
.attr('height', 20);
utilizando datos sobre el grupo (g
) elemento:
var chart = d3.select('body').append('svg')
.attr('width',800)
.attr('height',350)
.selectAll('g')
.data(data) // <--- attach directly to the g
.enter().append('g')
.attr('class', function(d) { return d.user; })
.attr('transform', function(d, i) { return 'translate(0, ' + i * 140 + ')'; })
.selectAll('rect')
.data(function(d) { return d.scores; })
.enter().append('rect')
.attr('y', function(d, i) { return i * 20; })
.attr('width', function(d) { return d; })
.attr('height', 20);
De nuevo, no tiene que crear estos elementos g, pero al hacerlo ahora puedo representar los puntajes de los usuarios de manera diferente (tienen diferentes nt y de la transformación) y también puedo dar diferentes estilos, como este:
.jim {
fill: red;
}
.ray {
fill: blue;
}
Hola Mike, es un honor con la obtención de la ayuda de usted :) Lo que quiero en este ejemplo, es la obtención de un único SVG imagen. Parece que mi error no fue usar .data ([data]), solo .data (data) en su lugar. Lamentablemente no puedo verificarlo de inmediato, pero lo haré esta tarde. Yo había robado "selecciones anidadas" antes. Parecía que no cubría este tema, pero como lo recomendó, profundizaré en estos tutoriales. Actualizaré esta publicación. ¡Gracias! – Ray
Me alegro de poder ayudar. Si esto respondió su pregunta, agregue la marca de verificación para resolverlo. ¡Gracias! – mbostock
Hola otra vez, esa solución no funciona. Esta vez no hay ninguna imagen en este momento: \ – Ray