d3を使用してグラフにエッジラベルを付けることはできますか?私は例といくつかのドキュメントを見てきましたが、どこでノードのラベル付けが可能かを見ることができますが、エッジラベルはどこにでも明示的には記載されていません。d3エッジラベリングは可能ですか?
答えて
I
- は
- 、すべてのエッジと一緒に
path
を追加エッジに沿ってパスを参照しているtextpath
にそのテキストバインドエッジ - に
text
を追加
この例では、上のアイデア:http://bl.ocks.org/jhb/5955887
短い答えは「はい」ですが、明示的なサポートはありません。自分でラベルの位置を決めなければなりません。これを行う1つの方法は、開始ノードにラベルを付け、それをターゲットノードまでの距離の半分だけでなく、ラインと重なるのを防ぐためにオフセットすることです。より精巧なエッジ(例えば、曲線)については、より困難になる。
http://bl.ocks.org/2926502は、このアプローチの例であり、各リンクの両端の近くにラベルが付いています。ラベル位置は各ティックで再計算されます。 – donaldh
私はパスオプションでテキストを試しましたが、それはかなり関わっていて、私が欲しかった外観にはなりませんでした。残念ながら、私はローカルのgitリポジトリにチェックインしませんでした。これは私のEclipseの歴史に由来します(Eclipse開発者に感謝します)。このコードスニペットを独自のデータ構造に変更する必要がありますが、私はそれが何らかの助けになることを願っています。具体的には、lines
の値にid
の値を加算し、xlink:href
という属性を使用してパーセンテージの値で再利用することに注意してください。また、textpath
にtspan
を追加して、テキストを数ピクセル下に移動して、パス上に表示されるようにしました。他の人々の例次の
function drawLines(links) {
var diagonal = d3.svg.diagonal();
var format = d3.format(".1%");
var linkKey = function(l) {return l.target.key; };
var lines = linesGroup.selectAll("path").data(links, linkKey);
lines.enter()
.append("path")
.on("mouseover", select)
.on("mouseout", unselect)
.attr("d", diagonal)
.attr("id", function (l) { return "interaction-path-target-" + l.target.key; })
.style("stroke-width", 0.000001);
lines.exit()
.transition().duration(500)
.style("stroke-width", 0.000001)
.remove();
lines.transition()
.delay(function(d, i) { return i * 100; })
.duration(500)
.style("stroke-width", function(d) { return d.weight == 0 ? 0.000001 : d.weight/1000; })
.attr("d", diagonal);
var percentages = linesGroup.selectAll("text").data(links, linkKey);
percentages.enter()
.append("text")
.attr("opacity", 1)
.append("svg:textPath")
.attr("startOffset", "70%")
.attr("xlink:href",
function(l) {
return "#interaction-path-target-" + l.target.key;
})
.append("svg:tspan")
.attr("dy", 3)
.attr("class", "percentageText")
percentages.exit()
.transition().duration(500)
.attr("opacity", 0)
.remove();
percentages
.transition()
.delay(function(d, i) { return i * 100; })
.duration(500)
.attr("opacity", 1);
percentages.select(".percentageText").text(function(d) {
var newvalue = d.weight ?
d.incomming ? percentageIn(d.weight) : percentageOut(d.weight) : 0;
return format(newvalue);
});
}
- 1. D3ズーム可能なサークルは
- 2. d3でマルチズームを実行することは可能ですか
- 3. Cytoscape.js:2面のエッジラベリング
- 4. ノードバリアはd3 forceレイアウトで可能ですか?
- 5. d3.zoomコールバックをデバウンスすることは可能ですか?
- 6. D3 v4でズーム可能なツリーマップ
- 7. d3.jsの強制レイアウトで動的linkDistanceが可能ですか?
- 8. d3グループをドラッグ可能にする
- 9. クリック可能な凡例をd3ポリゴンチャートで表示するには
- 10. d3で動的グリッド線グラフを作成することは可能ですか?
- 11. サイズ変更可能な回転可能な長方形D3?
- 12. d3拡大可能なTreemap from CSV
- 13. D3 v4ドラッグ可能な要素をクリック
- 14. d3 v4ソート可能な棒グラフのラジオボタン
- 15. D3ズーム可能サンバーストオーダーの子供
- 16. D3棒グラフとHTMLデータは、私はD3ズーム可能な棒グラフを持って
- 17. d3 divのツールチップをスクロール可能にする方法は?ここ
- 18. d3 - closureからアクセス可能なtickFormat + mutable変数の問題?
- 19. D3フォースグラフでD3ノード選択はどのように機能しますか?
- 20. d3を使用したブラシブルでズーム可能なタイムライン
- 21. C++可変マルチタイプは可能ですか?
- 22. 可変変数は可能ですか?
- 23. ダイレクトコールは可能ですか?
- 24. StageWebViewは可能ですか?
- 25. タイプファミリーインスタンスプルーフは可能ですか?
- 26. ワンライナーは可能ですか?
- 27. Html.pagedListPagerは可能ですか?
- 28. クロスウィンドウドメインスクリプトは可能ですか?
- 29. d3では、トゥイーンのパス位置を動的に変更することは可能ですか?
- 30. ハッシュ可能なビルトインオブジェクトはPythonで変更可能ですか?
私は、テキストがグラフのパスに従うようにラベルを付けることを意味します。もしそうなら、SVGは仕様の[text on a path](http://www.w3.org/TR/SVG/text.html#TextOnAPath)機能を持っているようですが、私はそれを試したことはありません。それがいかに簡単か確かめてください。 – meetamit