このような特定のポイントでツールチップを使用するInteractive Streamgraphを作成しようとしています 。一部のデータ ポイントにはテキストが含まれており、そこに円を描き、円の上にカーソルを置いたときにデータを表示しています。
対応する場所にテキストがあるすべてのレイヤーの各要素に円を表示するにはどうすればよいですか? コードの大部分は最初のグラフと同じですが、以下のコードはわずかに変更されています。
また、最初のグラフのページの下部にある data.csv ファイルには、「メタ」と呼ばれる追加の列があります。ほとんどのエントリにはメタに「---」が含まれていますが、実際のテキストが含まれているエントリもあります。それらは私が表示したいものであり、情報のためにホバーできるようにします.
svg.selectAll(".layer")
.on("mousemove", function(d, i) {
mousex = d3.mouse(this);
mousex = mousex[0];
var invertedx = x.invert(mousex);
invertedx = invertedx.getFullYear();
var selected = d.values;
for (var k = 0; k < selected.length; k++) {
datearray[k] = selected[k].date
datearray[k] = datearray[k].getFullYear();
}
mousedate = datearray.indexOf(invertedx);
pro = d.values[mousedate].value;
meta = d.values[mousedate].meta;
d3.select(this)
.classed("hover", true)
.attr("stroke", strokecolor)
.attr("stroke-width", "1px")
tooltip.html( function(){if(meta == "---") return "";else return "<p>" + d.key + "<br>" + pro + "<br>" + meta + "</p>";}).style("visibility", "visible")
.style("top", (event.pageY-30) + "px").style("left",(event.pageX+10)+"px")
.style("color", "black")
})
.on("mouseout", function(d, i) {
svg.selectAll(".layer")
.transition()
.duration(250)
.attr("opacity", "1");
d3.select(this)
.classed("hover", false)
.attr("stroke-width", "0px"), tooltip.html( "<p>" + d.key + "<br>" + pro + "<br>" + "hello" + "</p>" ).style("visibility", "hidden");
})
これは、参照としてこれまでに試みたものです(正しくも完全でもありません:x)これをvarグラフ関数の中に入れます:
var circles = svg.selectAll("circle")
.data(layers).enter().append("circle")
.attr("x", function(d, i) {
for(var k = 0; k < d.values.length; k++){
//console.log(d.values[k].meta)
if(d.values[k].meta != "---")
return d.values[k].date
}
})
.attr("y", function(d, i) {
for(var k = 0; k < d.values.length; k++){
if(d.values[k].meta != "---")
return d.values[k].value
}
})
.attr("r", 2)
.style("fill", "black")
どんな助けでも大歓迎です。