我正在使用d3中的散点图,图中的点代表不同的纸张。图表上的论文可以有不同的类型,即。 In_library,引用,引用_和 - 每种类型都有不同的颜色。点击具有In_library类型的纸张,单击的纸张引用的纸张和引用所点击的纸张的纸张将从数据库中检索并根据其类型在图形上显示为不同的颜色。
我遇到的问题是,例如,图表上最初有4篇论文,它们都是In_library类型。当我点击其中一个时,会出现与之相关的文件。但我想要的是,如果一篇论文引用或引用了一个非常类型的In_library的文章(已经在图上),我想把它识别为In_library并改变类型让我们说 键入" combo"而不是将其更改为键入"引用"或"引用",以便在视觉上我仍然知道它在图书馆中,但它也是与所选论文相关联的论文。这是迄今为止我用来检查检索到的纸张是否类型为" In_library"如果是这样,将类型更改为" combo",否则给它类型"引用"或"引用" (取决于它所处的连接)。
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的新手,但是如果我想做的事情也不可行,但如果实现这一目标的另一种方式我也会感激。提前谢谢!
答案 0 :(得分:0)
听起来像你在这里努力而不是利用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。