2016-11-19 38 views
0

d3.jsを使用して、マウスオーバー時に描かれた楕円弧を強調表示し、ツールチップを表示する方法を教えてください。 D3の棒グラフにツールチップを追加するD3-チップを用いマウスオーバーでD3.jsを使用して描かれたハイライト楕円弧とツールチップを表示

+0

異なるものジャイだ、あなたはより多くの詳細が必要な場合、私に知らせてください、以下の私のD3-先端答えを見つけるしてくださいまさにあなたの必要条件です。 –

+0

あなたの応答のためにBhuvaneshありがとうございます。状況は、2つの楕円弧を使用して接続している3つの異なる位置の世界地図が表示されていることです。さて、地図上に表示された異なる場所からつながるような弧がたくさんあるようになります。私が意図しているのは、ユーザーが円弧の任意の部分にカーソルを置いたときに、ツールチップが飛び出し、必要な記述情報が表示され、可能であれば強調表示する必要があるということです。 Tipsy.jsを使用する前にツールチップを実装しましたが、これを実現することができませんでした。 – sjaikumar

答えて

0
<!DOCTYPE html> 
<meta charset="utf-8"> 
<html> 
<head> 
    <style> 
     body { font: 10px sans-serif; } 

     .d3-tip { 
      background: rgba(0, 0, 0, 0.8); 
      border-radius: 2px; 
      color: #fff; 
      font-weight: bold; 
      line-height: 1; 
      padding: 12px; 
     } 
    </style> 
</head> 
<body> 
<script src="http://d3js.org/d3.v3.min.js"></script> 
<script src="http://labratrevenge.com/d3-tip/javascripts/d3.tip.v0.6.3.js"></script> 
<script> 

    var w = window.innerWidth, 
     h = window.innerHeight, 
     margin = { top: 40, right: 20, bottom: 20, left: 40 }; 

    var svg = d3.select("body").append("svg").attr({ 
     width: w, 
     height: h 
    }); 

    var dataset = [ 
     { toolTip: "one", d: "M 50 200 a 100 50 0 1 1 250 50" }, 
     { toolTip: "two", d: "M 400 100 a 100 50 30 1 1 250 50" }, 
     { toolTip: "three", d: "M 400 300 a 100 50 45 1 1 250 50" }, 
     { toolTip: "four", d: "M 750 200 a 100 50 135 1 1 250 50" } 
    ]; 

    var tip = d3.tip() 
     .attr('class', 'd3-tip') 
     .offset([-10, 0]) 
     .html(function(d) { 
      return "<strong>Elipse:</strong> <span style='color:red'>" + d.toolTip + "</span>"; 
     }); 

    svg.selectAll("g") 
     .data(dataset) 
     .enter() 
     .append("g") 
     .attr("stroke-width", 3) 
     .attr("stroke", "black") 
     .attr("fill", "none") 
     .on('mouseover', tip.show) 
     .on('mouseout', tip.hide) 
     .append("path") 
     .attr("d", function(d) { return d.d }) 
     .on('mouseover', highLight) 
     .on('mouseout', unHighLight); 

     svg.call(tip); 

    function highLight(){ 
     var foo = d3.select(this); 
     foo.attr("stroke","red"); 
    } 

    function unHighLight(){ 
     var foo = d3.select(this); 
     foo.attr("stroke","black"); 
    } 

</script> 
</body> 
</html> 

view block here

+0

ダミアン、私はあなたの答えに十分に感謝することはできません。私は正常に私のコードでそれを実装することができました。今私が唯一の質問は、ユーザーが選択する楕円弧をどのように強調表示できるかです。私の意図は、ユーザがその弧の上に乗ったときにのみ画面上の他の弧から目立つように強調することです。ツールチップも同時に表示されます。もう一度ありがとうございます:) – sjaikumar

+0

@sjaikumar - "g"にマウスイベントを追加し、 "path"がマウスイベントを変更して関数を呼び出すようにしました。上記の編集済みのコードを参照するか、[ブロックリンク](http://bl.ocks.org/damianak1/c0baa4ac91f8e2c338857877b228710c)をクリックしてライブが表示されるようにします(更新されたコードを見るにはブラウザのキャッシュをクリアする必要があります)。 – Damian

+1

@Damianありがとうございました。これはうまくいきましたが、同時に2つのマウスイベントをトリガする問題に遭遇しました。言い換えれば、私はツールチップまたはハイライトを見ることしかできず、両方が一緒に表示されませんでした。これを克服するために、私はこの方法で名前空間を利用しました。 .on( "mouseover.tip"、tip.show).on( "mouseover.highlight"、強調表示); – sjaikumar

-1

Index.htmlと:

Using d3-tip to add tooltips to a d3 bar chart. 
<!DOCTYPE html> 
<meta charset="utf-8"> 
<style> 

body { 
    font: 10px sans-serif; 
} 

.axis path, 
.axis line { 
    fill: none; 
    stroke: #000; 
    shape-rendering: crispEdges; 
} 

.bar { 
    fill: orange; 
} 

.bar:hover { 
    fill: orangered ; 
} 

.x.axis path { 
    display: none; 
} 

.d3-tip { 
    line-height: 1; 
    font-weight: bold; 
    padding: 12px; 
    background: rgba(0, 0, 0, 0.8); 
    color: #fff; 
    border-radius: 2px; 
} 

/* Creates a small triangle extender for the tooltip */ 
.d3-tip:after { 
    box-sizing: border-box; 
    display: inline; 
    font-size: 10px; 
    width: 100%; 
    line-height: 1; 
    color: rgba(0, 0, 0, 0.8); 
    content: "\25BC"; 
    position: absolute; 
    text-align: center; 
} 

/* Style northward tooltips differently */ 
.d3-tip.n:after { 
    margin: -1px 0 0 0; 
    top: 100%; 
    left: 0; 
} 
</style> 
<body> 
<script src="http://d3js.org/d3.v3.min.js"></script> 
<script src="http://labratrevenge.com/d3-tip/javascripts/d3.tip.v0.6.3.js"></script> 
<script> 

var margin = {top: 40, right: 20, bottom: 30, left: 40}, 
    width = 960 - margin.left - margin.right, 
    height = 500 - margin.top - margin.bottom; 

var formatPercent = d3.format(".0%"); 

var x = d3.scale.ordinal() 
    .rangeRoundBands([0, width], .1); 

var y = d3.scale.linear() 
    .range([height, 0]); 

var xAxis = d3.svg.axis() 
    .scale(x) 
    .orient("bottom"); 

var yAxis = d3.svg.axis() 
    .scale(y) 
    .orient("left") 
    .tickFormat(formatPercent); 

var tip = d3.tip() 
    .attr('class', 'd3-tip') 
    .offset([-10, 0]) 
    .html(function(d) { 
    return "<strong>Frequency:</strong> <span style='color:red'>" + d.frequency + "</span>"; 
    }) 

var svg = d3.select("body").append("svg") 
    .attr("width", width + margin.left + margin.right) 
    .attr("height", height + margin.top + margin.bottom) 
    .append("g") 
    .attr("transform", "translate(" + margin.left + "," + margin.top + ")"); 

svg.call(tip); 

d3.tsv("data.tsv", type, function(error, data) { 
    x.domain(data.map(function(d) { return d.letter; })); 
    y.domain([0, d3.max(data, function(d) { return d.frequency; })]); 

    svg.append("g") 
     .attr("class", "x axis") 
     .attr("transform", "translate(0," + height + ")") 
     .call(xAxis); 

    svg.append("g") 
     .attr("class", "y axis") 
     .call(yAxis) 
    .append("text") 
     .attr("transform", "rotate(-90)") 
     .attr("y", 6) 
     .attr("dy", ".71em") 
     .style("text-anchor", "end") 
     .text("Frequency"); 

    svg.selectAll(".bar") 
     .data(data) 
    .enter().append("rect") 
     .attr("class", "bar") 
     .attr("x", function(d) { return x(d.letter); }) 
     .attr("width", x.rangeBand()) 
     .attr("y", function(d) { return y(d.frequency); }) 
     .attr("height", function(d) { return height - y(d.frequency); }) 
     .on('mouseover', tip.show) 
     .on('mouseout', tip.hide) 

}); 

function type(d) { 
    d.frequency = +d.frequency; 
    return d; 
} 

</script> 

Data.tsv

文字周波数 0.08167 B 0.01492 0.02780 C D 0.04253 E 0.12702 0.02288 F G 0.02022 0.06094 H I 0.06973 0.00153 J K 0.00747 0.04025 L M。 02517 N 0.06749 0.07507 O P 0.01929 0.00098 Q R 0.05987 0.06333 S T 0.09056 0.02758 U V 0.01037 0.02465 X 0.00150WY 0.01971 Z 0.00074

参考:

関連する問題