Я новичок в d3.js и JavaScript.Вот мой код для силового ориентированного графа в d3 с данными файла CSV.
Перед тем, как перейти к нему, вот фрагмент кода, который я хочу сделать аналогичным http://bl.ocks.org/eesur/be2abfb3155a38be4de4
Все в графике в порядке, но событие onclick не работает.Функция щелчка, как предполагается, применяет событие click ко всем узлам в данных CSV (то есть 16 узлов), но мой график имеет только 9 узлов.
Я пытался поместить данные щелчка в эти конкретные узлы, ноне удалось вместо.Также вот данные CSV, которые я хочу нарисовать на графике
https://github.com/hohadang1999/Authorship-Network-Graph/blob/master/publications.csv
d3.csv("publications.csv", function(error, links) {
var nodes = {};
links.forEach(function(link) {
link.source = nodes[link.source] ||
(nodes[link.source] = {name: link.source});
link.target = nodes[link.target] ||
(nodes[link.target] = {name: link.target});
});
var width = 1500,
height = 500;
var force = d3.layout.force()
.nodes(d3.values(nodes))
.links(links)
.size([width, height])
.linkDistance(180)
.charge(-300)
.on("tick", tick)
.start();
var svg = d3.select("body").append("svg")
.attr("width", width)
.attr("height", height);
svg.append("svg:defs").selectAll("marker")
.data(["end"])
.enter().append("svg:marker")
.attr("id", String)
.attr("viewBox", "0 -5 10 10")
.attr("refX", 15)
.attr("refY", -1.5)
.attr("markerWidth", 6)
.attr("markerHeight", 6)
.attr("orient", "auto")
.append("svg:path")
.attr("d", "M0,-5L10,0L0,5");
var path = svg.append("svg:g").selectAll("path")
.data(force.links())
.enter().append("svg:path")
.attr("class", "link")
.attr("marker-end", "url(#end)")
.style("stroke","#eee")
.on("click", click);
var node = svg.selectAll(".node")
.data(force.nodes())
.enter().append("g")
.attr("class", "node")
.on("click", click)
.call(force.drag);
node.append("circle")
.attr("r", 15)
.style("fill","lightcoral")
.style("stroke","red");
node.append("text")
.attr("x",20)
.attr("dy", ".65em")
.text(function(d) { return d.name; });
node.on("click", function )
function tick() {
path.attr("d", function(d) {
var dx = d.target.x - d.source.x,
dy = d.target.y - d.source.y,
dr = Math.sqrt(dx * dx + dy * dy);
return "M" +
d.source.x + "," +
d.source.y + "A" +
dr + "," + dr + " 0 0,1 " +
d.target.x + "," +
d.target.y;
});
node
.attr("transform", function(d) {
return "translate(" + d.x + "," + d.y + ")"; });
}
function click() {
d3.select(this).select("circle").transition()
.duration(750)
.attr("r",6)
.style("fill", "#ccc");
}
});
Чего я хочу добиться, так это события щелчка на этих узлах, как показано на графике