2017-08-08 16 views
0

こんにちは、私はd3jsで新しくなっていますので、円グラフのコードでmouseoverイベントを使用することができません。 mouseoverイベントとラベルを表示するいくつかのクラス?ここで円グラフでマウスオーバーを使用し、ラベルをd3 v3で表示します。

は、私は円グラフを描画するために使用していたコードです:

var w = 300; 
var h = 300; 

var dataset = [ 
    {"year":"2017-07-01","value":"5"}, 
    {"year":"2017-07-02","value":"10"}, 
    {"year":"2017-07-03","value":"15"}, 
    {"year":"2017-07-04","value":"20"}, 
    {"year":"2017-07-05","value":"25"}, 
    {"year":"2017-07-06","value":"30"}, 
    {"year":"2017-07-07","value":"35"}, 
    {"year":"2017-07-08","value":"40"}, 
    {"year":"2017-07-09","value":"45"}, 
    {"year":"2017-07-10","value":"50"}, 
    {"year":"2017-07-11","value":"55"}, 
    {"year":"2017-07-12","value":"60"}, 
    {"year":"2017-07-13","value":"65"}, 
    {"year":"2017-07-14","value":"70"} 
]; 

var outerRadius = w/2; 
var innerRadius = 0; 
var arc = d3.svg.arc() 
    .innerRadius(innerRadius) 
    .outerRadius(outerRadius); 

var pie = d3.layout.pie() 
    .value(function(d) { 
    return d.value; 
    }); 

var color = d3.scale.category20(); 

var svg = d3.select("#chart") 
    .append("svg") 
    .attr("width", w) 
    .attr("height", h); 

var arcs = svg.selectAll("g.arc") 
    .data(pie(dataset)) 
    .enter() 
    .append("g") 
    .attr("class", "arc") 
    .attr("transform", "translate(" + outerRadius + "," + outerRadius + ")"); 

arcs.append("path") 
    .attr("fill", function(d, i) { 
    return color(i); 
    }) 
    .attr("d", arc); 

arcs.append("text") 
    .attr("transform", function(d) { 
    return "translate(" + arc.centroid(d) + ")"; 
    }) 
    .attr("text-anchor", "middle") 
    .text(function(d) { 
    return d.value; 
    }); 
+0

どのラベルを表示しますか?パイのスライスにはすでに値がありますか?または別のラベル?ユーザーがスライス上にマウスを移動したとき、またはユーザーがパイ全体にカーソルを合わせたときあなたは、適切な助けを得るために、あなたが念頭に置いているものを正確に説明しなければならないことが分かります。 * "ラベルを表示したい" *はかなり曖昧です。 –

+0

私はマウスオーバーで値を表示する必要があります – kunal

+0

まあ、私はちょうどあきらめます。がんばろう。 –

答えて

2

私はツールチップを使用します。ツールチップを呼び出すことが次に

var popup=d3.select("body").append("div").attr("class","tooltip").style("opacity",0); 

を、ノードにイベントリスナーを追加します(私はそれが円弧になると思いますが、私は円グラフを作っていません):

nodes.on("mouseover", fade(.1,"over")).on("mouseout",fade(.8,"out")); 

次に、ツールティを置く関数ノード(またはこの場合はパイ)付近のp:

function fade (opacity, event){ 
return function (d){ 
    if(event === "over"){ 
    popup.transition().duration(100).style("opacity", .9).style("display", "inline-block"); 
    popup.html("Year: " + d.year + "</br> Value: " + d.value) 
    .style("left", (d3.event.pageX + 20) + "px") 
    .style("top", (d3.event.pageY - 20) + "px"); 
    d3.select(this).classed("node-mouseover", true);} 
else if(event==="out"){ 
    popup.transition().duration(100).style("opacity",0); 
    d3.select(this).classed("node-mouseover",false); 

}}}

あり、それを行うための他の方法がありますが、これはthis exampleが似ている、かなり人気があるようです。

編集:さらに詳しい例はbl.ocks.orgをご覧ください。

関連する問題