我正在使用d3中的散点图,图中的点代表不同的论文。图表上的论文可以有不同的类型。In_library,cites,cited_by-每种类型都有不同的颜色。在点击类型为In_library的论文时,从数据库中检索被点击的论文引用的论文和引用被点击的论文的论文,并根据其类型在图形上显示为不同的颜色。
我遇到的问题是,例如,最初在图表上显示了4篇论文,它们都是In_library类型的。当我点击其中一个时,链接到它的论文就会出现。但我想要的是,如果一篇论文引用或被一篇已经属于In_library类型的论文引用(已经在图表上),我希望将其识别为In_library,并将其类型更改为“组合”类型,而不是将其更改为" cites“或”selected by“类型,这样在视觉上我仍然知道它在库中,但它也是一篇链接到所选论文的论文。这是到目前为止我检查检索到的论文是否属于"In_library“类型的相关代码,如果是,将类型更改为"combo",否则将其类型指定为"cites”或"cited“(取决于它所在的连接)。
function clickHandler (d, i) {
d3.json("connection2.php?paperID="+d.ID, function(error, dataJson) {
dataJson.forEach(function(d) {
d.YEAR = +d.YEAR;
d.counter = +d.counter;
if (d.type === "In_library") {
d.type = "combo";
}
else d.type = "cited by";
allData.push(d);
}
})
}感谢任何帮助我是d3的新手,但如果我尝试做的事情不可行,但如果有其他方法实现这一点,我也将不胜感激。提前感谢!
发布于 2016-03-13 01:21:48
在我看来,您在这里尝试得太过努力了,并且没有利用d3功能。您有一堆唯一标识的圆;当您绘制曲线图时,您希望那些新绘制的圆圈具有某种颜色。当更新时,您希望那些已经存在的颜色是新的颜色。这听起来是为enter/update/exit pattern量身定做的。
function update(data){
// this is our overall update selection
var sel = svg.selectAll('circle')
.data(data, function(d,i){
return d.id;
});
// those that are updated
// mark with combo class
sel.attr("class", "combo");
// these are the newly arriving guys
sel.enter()
.append("circle")
.attr('cx', function(d){
return s(d.x);
})
.attr('cy', function(d){
return s(d.y);
})
.attr('r', 25)
.attr("class", "in_library");
}这是一个quick example。
https://stackoverflow.com/questions/35956835
复制相似问题