Привет, я довольно новичок в d3 и пытаюсь добавить текст при наведении курсора мыши при создании графика. Кто-нибудь может предложить, пожалуйста, способ его реализации? Я перепробовал множество вариантов, таких как создание переменной div для выбора div id, добавление заголовка к кружку и предоставление текста, но пока ничего не получалось.
Вот мой код js:
var width = 900,
height = 500;
var svg = d3.select("#chart")
.append("svg")
.attr("height", height)
.attr("width", width)
.append("g")
.attr("transform", "translate(" + width/2+"," + height/2 +")")
var defs = svg.append("defs");
defs.append("pattern")
.attr("id", "flag")
.attr("height", "100%")
.attr("width", "100%")
.attr("patternContentUnits", "objectBoundingBox")
.append("image")
.attr("height", 1)
.attr("width", 1)
.attr("preserveAspectRatio", "none")
.attr("xmlns:xlink", "http://www.w3.org/1999/xlink")
.attr("xlink:href", "images/usa.gif");
var radiusScale = d3.scaleSqrt().domain([0, 61000]).range([5, 40])
// the simulation is a collection of forces
// about where we want our circles to go
// and how we want our circles to interact
// STEP ONE: get them to the middle
// STEP TWO: don't have them collide!!!
var simulation = d3.forceSimulation()
.force("x", d3.forceX().strength(0.05))
.force("y", d3.forceY().strength(0.05))
.force("collide", d3.forceCollide(function(d) {
return radiusScale(d.casualities) + 1;
}))
d3.csv("sub_country.csv ").then(ready)
function ready (datapoints) {
defs.selectAll(".flag-pattern")
.data(datapoints)
.enter().append("pattern")
.attr("class", "flag-pattern")
.attr("id", function(d) {
return d.Country
})
.attr("height", "100%")
.attr("width", "100%")
.attr("patternContentUnits", "objectBoundingBox")
.append("image")
.attr("height", 1)
.attr("width", 1)
.attr("preserveAspectRatio", "none")
.attr("xmlns:xlink", "http://www.w3.org/1999/xlink")
.attr("xlink:href", function(d) {
return d.image_path
});
var circles = svg.selectAll(".Country")
.data(datapoints)
.enter().append("circle")
.attr("class", "Country")
.attr("r", function(d) {
return radiusScale(d.casualities);
})
.on('click', function(d) {
console.log(d)
})
.attr("fill", function(d) {
return "url(#" + d.Country + ")"
})
simulation.nodes(datapoints)
.on('tick', ticked)
function ticked() {
circles
.attr("cx", function(d) {
return d.x
})
.attr("cy", function(d) {
return d.y
})
}
}
})();
Данные выглядят так:
Country,casualities,image_path
algeria,4760,images/algeria.jpg
bahrain,67,images/bahrain.jpg
canada,48,images/canada.png
egypt,5129,images/egypt.png
international,13,images/international.png
iran,1210,images/iran.png
iraq,74473,images/iraq.png
israel,5129,images/israel.png
jordan,278,images/jordan.png
Заранее спасибо!