d3.jsを使用して、マウスオーバー時に描かれた楕円弧を強調表示し、ツールチップを表示する方法を教えてください。 D3の棒グラフにツールチップを追加するD3-チップを用いマウスオーバーでD3.jsを使用して描かれたハイライト楕円弧とツールチップを表示
答えて
<!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>
ダミアン、私はあなたの答えに十分に感謝することはできません。私は正常に私のコードでそれを実装することができました。今私が唯一の質問は、ユーザーが選択する楕円弧をどのように強調表示できるかです。私の意図は、ユーザがその弧の上に乗ったときにのみ画面上の他の弧から目立つように強調することです。ツールチップも同時に表示されます。もう一度ありがとうございます:) – sjaikumar
@sjaikumar - "g"にマウスイベントを追加し、 "path"がマウスイベントを変更して関数を呼び出すようにしました。上記の編集済みのコードを参照するか、[ブロックリンク](http://bl.ocks.org/damianak1/c0baa4ac91f8e2c338857877b228710c)をクリックしてライブが表示されるようにします(更新されたコードを見るにはブラウザのキャッシュをクリアする必要があります)。 – Damian
@Damianありがとうございました。これはうまくいきましたが、同時に2つのマウスイベントをトリガする問題に遭遇しました。言い換えれば、私はツールチップまたはハイライトを見ることしかできず、両方が一緒に表示されませんでした。これを克服するために、私はこの方法で名前空間を利用しました。 .on( "mouseover.tip"、tip.show).on( "mouseover.highlight"、強調表示); – sjaikumar
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
参考:
- 1. D3タイムアウトでマウスオーバーしたときのツールチップを表示
- 2. jsを使用して楕円形を描く方法は?
- 3. ハイライトD3.jsを使用する円の円周
- 4. d3.jsで円弧を作成
- 5. Leafletjs描画ライブラリを使用して楕円を描く
- 6. 楕円の中に複数の塗りつぶした円弧を描く
- 7. d3.js - csvで円グラフで表示
- 8. CoreGraphicsで楕円弧を描く方法は?
- 9. D3.jsパターンが円弧またはドーナツグラフで機能しない
- 10. ドロップダウンでマウスオーバーして、選択したテキストのツールチップを表示
- 11. AndroidでSweepGradientを使用して円弧を描く
- 12. NSViewのマウスイベントでコンテンツとして楕円が表示される
- 13. D3の複数の楕円がエラーなしで表示されない
- 14. d3円弧と点をリボンで結ぶ
- 15. JavaScriptを使用して円弧を描く
- 16. 画像内の楕円を伸ばして円を描く
- 17. pstricksとlatex2html5で円弧を描く
- 18. 非常に単純なD3:円弧を描くには?
- 19. タートルで超楕円を描く
- 20. Cで楕円を描く方法は?
- 21. Javaで複数の楕円を描く
- 22. d3.jsを使用して矢印で線を描く方法
- 23. 描画長方形と楕円
- 24. 斬新な円弧を描くアンドロイドドロウダブル円
- 25. DIV DOM要素を使用して円弧と円を作成
- 26. D3.jsを使用してrectにテキストを表示する
- 27. D3円グラフのツールチップとアニメーションの問題
- 28. UIBezierPathで傾斜した楕円を描く方法
- 29. matlabで楕円を描きたい。私は楕円パラメータを持っています
- 30. Android - キャンバスで描かれたパスを選択/ハイライト表示
異なるものジャイだ、あなたはより多くの詳細が必要な場合、私に知らせてください、以下の私のD3-先端答えを見つけるしてくださいまさにあなたの必要条件です。 –
あなたの応答のためにBhuvaneshありがとうございます。状況は、2つの楕円弧を使用して接続している3つの異なる位置の世界地図が表示されていることです。さて、地図上に表示された異なる場所からつながるような弧がたくさんあるようになります。私が意図しているのは、ユーザーが円弧の任意の部分にカーソルを置いたときに、ツールチップが飛び出し、必要な記述情報が表示され、可能であれば強調表示する必要があるということです。 Tipsy.jsを使用する前にツールチップを実装しましたが、これを実現することができませんでした。 – sjaikumar