Tengo un conjunto de datos que estoy trazando en una dispersión. Cuando pase el mouse sobre uno de los círculos, me gustaría que aparezca con datos (como valores x, y, tal vez más). Esto es lo que intenté usar:
vis.selectAll("circle")
.data(datafiltered).enter().append("svg:circle")
.attr("cx", function(d) { return x(d.x);})
.attr("cy", function(d) {return y(d.y)})
.attr("fill", "red").attr("r", 15)
.on("mouseover", function() {
d3.select(this).enter().append("text")
.text(function(d) {return d.x;})
.attr("x", function(d) {return x(d.x);})
.attr("y", function (d) {return y(d.y);}); });
Sospecho que necesito ser más informativo sobre qué datos ingresar.
Respuestas:
Supongo que lo que quieres es una información sobre herramientas. La forma más fácil de hacer esto es agregar un
svg:title
elemento a cada círculo, ya que el navegador se encargará de mostrar la información sobre herramientas y no necesita el controlador del mouse. El código sería algo comoSi desea información sobre herramientas más sofisticada, puede usar tipsy, por ejemplo. Ver aquí para un ejemplo.
fuente
svg:g
que se superpone con el círculo real, pero dar cero ancho y alto. Actualmente está tomando el cuadro delimitador y colocando la información sobre herramientas en el borde. Jugar con las opciones de tipsy también podría ayudar.Aquí se describe una muy buena manera de hacer una información sobre herramientas: ejemplo simple de información sobre herramientas D3
Tienes que agregar un div
Entonces puedes alternarlo usando
d3.event.pageX
/d3.event.pageY
es la coordenada actual del mouse.Si quieres cambiar el texto puedes usar
tooltip.text("my tooltip text");
Ejemplo de trabajo
fuente
Hay una biblioteca impresionante para hacer eso que descubrí recientemente. Es simple de usar y el resultado es bastante bueno: d3-tip.
Puedes ver un ejemplo aquí :
Básicamente, todo lo que tiene que hacer es descargar ( index.js ), incluir el script:
y luego siga las instrucciones desde aquí (mismo enlace como ejemplo)
Pero para su código, sería algo como:
define el método:
crea tu svg (como ya lo haces)
llama al método:
agregue propina a su objeto:
No olvides agregar el CSS:
fuente
Puede pasar los datos que se usarán en el mouseover de esta manera: el evento mouseover usa una función con sus
enter
datos editados previamente como argumento (y el índice como segundo argumento), por lo que no necesita usarenter()
una segunda vez.fuente
d3.select(this)
modificar la forma y no sabía cómo obtener la instancia en una entrada / actualización.Este ejemplo conciso demuestra de manera común cómo crear información sobre herramientas personalizada en d3.
fuente
return tooltip.style("top", (d.x + 40) + "px") .style("left", (d.y + 80) + "px");
en el'mousemove'
atributo. Estod.x
ayudará a mover la información sobre la herramienta en relación con el objeto, no toda la página