Eu tenho um conjunto de dados que estou plotando em uma dispersão. Ao passar o mouse sobre um dos círculos, gostaria que ele aparecesse com dados (como valores x, y, talvez mais). Aqui está o que eu tentei 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);}); });
Eu suspeito que preciso ser mais informativo sobre quais dados inserir?
Respostas:
Presumo que o que você deseja é uma dica de ferramenta. A maneira mais fácil de fazer isso é anexar um
svg:title
elemento a cada círculo, pois o navegador cuidará de mostrar a dica de ferramenta e você não precisará do manipulador do mouse. O código seria algo comoSe você quiser dicas de ferramentas mais sofisticadas, poderá usar embriagado, por exemplo. Veja aqui um exemplo.
fonte
svg:g
sobreposição com o círculo real, mas dê largura e altura zero. Atualmente, ele pega a caixa delimitadora e coloca a dica na borda. Brincar com as opções de tipsy pode ajudar também.Uma maneira realmente boa de fazer uma dica de ferramenta é descrita aqui: Exemplo simples de dica de ferramenta D3
Você precisa anexar uma div
Então você pode simplesmente alternar usando
d3.event.pageX
/d3.event.pageY
é a coordenada atual do mouse.Se você deseja alterar o texto, pode usar
tooltip.text("my tooltip text");
Exemplo de trabalho
fonte
Há uma biblioteca incrível para fazer isso que eu descobri recentemente. É simples de usar e o resultado é bastante elegante: ponta d3.
Você pode ver um exemplo aqui :
Basicamente, tudo o que você precisa fazer é fazer o download ( index.js ), incluir o script:
e siga as instruções aqui (mesmo link do exemplo)
Mas para o seu código, seria algo como:
defina o método:
crie seu svg (como você já faz)
chame o método:
adicione dica ao seu objeto:
Não se esqueça de adicionar o CSS:
fonte
Você pode passar os dados a serem usados na mouseover assim - o evento mouseover usa uma função com os
enter
dados editados anteriormente como argumento (e o índice como segundo argumento), para que você não precise usarenter()
uma segunda vez.fonte
d3.select(this)
modificar a forma e não sabia como obter a instância em uma entrada / atualização.Este exemplo conciso demonstra como é comum criar dicas de ferramentas personalizadas no d3.
fonte
return tooltip.style("top", (d.x + 40) + "px") .style("left", (d.y + 80) + "px");
no'mousemove'
atributo Ad.x
ajuda irá mover a ferramenta de ponta em relação ao objeto, não a página inteira