首先,对长标题感到抱歉,我无法提出更好的解释我的问题的方法。
我所拥有的是一个散点图,circles
根据d.FamilyName
我的csv中的列具有不同的ID 。一些圈子共享相同的ID。
在该散点图的右侧,我设置了一个div,其中包含所有d.Familyname值的列表,嵌套这些值使它们仅显示一次。每个文本的ID也由d.FamilyName设置。
为了提高散点图的可读性,因为它具有许多值,我正计划event listener
在文本上添加鼠标悬停,然后应该修改与文本共享相同ID的圆的半径。
每个圆都绘制在内,var circle
而文本则绘制在div内,这是圆和文本部分的代码:
var circle = svg.append("g")
.attr("id", "circles")
.selectAll("circle")
.data(dataset)
.enter()
.append("circle")
.attr("cx", function (d) { return x(d.SquadraturaInterna_o); })
.attr("cy", function (d) { return y(d.SquadraturaEsterna_o); })
.attr("r", 2)
在radius属性之后,有一个事件侦听器来显示指定圆的其他值(名称和坐标),但它们与我认为的问题无关。文字部分:
d3.select("#elenco")
.select("#value")
.selectAll("text")
.data(nested)
.enter()
.append("p")
.append("text")
.attr("id", function (i) { return (i).key; })
.text(function (i) { return (i).key; })
.on("mouseover", function (d, i) {
if (this.id == circle.id)
{d3.select("circle")
.attr("r", 5);
}
else {d3.select("circle").attr("r", 1);}
;})
.on("mouseout", function (d, i) {
d3.selectAll("circle")
.attr("r", 2);
});
这个问题当然是对的if statement
的mouseover
。
非常感谢您提供有关如何解决此问题的任何提示,谢谢!
编辑:感谢@Lars的回复,我可以对他的代码进行一些编辑,例如:
.on("mouseover", function (d) {
var sel = this.id;
circle.filter(function() { return this.id === sel; }).attr("r", 5); })
.on("mouseout", function (d, i) {
d3.selectAll("circle")
.attr("r", 2); }
);
作为@musically_ut方法的替代方法,您还可以使用该.filter()
函数仅修改所需的元素。
.on("mouseover", function(d) {
circle.filter(function() { return this.id === d.FamilyName; }).attr("r", 5);
})
.on("mouseout", function(d) {
circle.filter(function() { return this.id === d.FamilyName; }).attr("r", 1);
})
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句