2016-04-28 7 views
0

にリンク内のテキストを追加します。ツールチップのテキストをリンク自体に直接表示することができます(したがって、静的画像として読み込むことができます)。私はリンクに.append("text")コールを追加しようとしましたが、ノードのために行われたように見えますが、動作していないようです。以下は上記の例に追加したコードです。は、私はここに示した例をオフに基づいてサンキーダイアグラムを作成しようとしていd3.jsサンキーダイアグラム

link.append("text") 
    .attr("x", 25) 
    .attr("y", function(d) { return d.dy/2; }) 
    .attr("dy", ".35em") 
    .attr("text-anchor", "end") 
    .attr("transform", null) 
    .text(function(d) { return d.source.name + " → " + d.target.name + "\n" + format(d.value); }); 
    .attr("text-anchor", "start"); 

ただし、この図には何も表示されません。

UPDATE:私は簡単に問題を再現するために要旨にマイク・ボストックのコードを貼り付け:http://bl.ocks.org/almsuarez/50eab68a645d7fc12183384000ea8c82

+0

あなたはフィドルの上に置くことができます? – echonax

+0

最も可能性が高い原因は、 'link'が' svg.append( "g")によって作成されるということです。selectAll( ".link") '' .append( "path") .attr( "class" "リンク") '。これは、 'link'が' paths'の選択であることを意味し、pathに 'text'要素を追加することはできません。あなたが代わりに行う必要があるのは、 'g 'を追加して' g'に 'path'と' text'の両方を追加することです。 – JSBob

+0

私はあなたが言っていることを見て、リンクされた要点を更新し、それを考慮に入れました。しかし、今私はテキストを適切にオーバーレイするためにリンクパスのxとyの位置を追跡する方法を知らない。 –

答えて

1

としては、あなたがSVG要素にテキストを追加することができないコメントで言われました。だから、コンテナにあなたのリンクを追加する瞬間に言う。例:

var link = container.append('path')....//and so on 

テキストの場合も同じ操作を行う必要があります。したがって、たとえば:

var linkText = container.append('text') 

xとyの位置を追跡できないとしますか?

基本的にリンクが2つのポイントの間にあるため、センターを見つける必要があります。ここで私はそれを行うだろうかです:

.attr("x", function(d) { console.log(d); return d.source.x + (d.target.x - d.source.x)/2; }) 
     .attr("y", function(d) { return d.source.y + (d.target.y - d.source.y)/2; }) 

だから、あなたはその後、targetXの差の半分追加ソースの」x位置を取得 - sourceXをとyのために同じことを行います。あなたが見ることのために

私はフィドルでこれを入れている:あなたは、リンク上にカーソルを移動することができます

https://jsfiddle.net/thatOneGuy/8ayq5nwa/2/は、あなたはそれがすべて正しい:)ですチェックできるタイトルをそのように見ることが

+0

私があなたのことを理解していれば、 'svg.append(" g ")。selectAll(" .link ")。data(energy.links).enter()'でコンテナを作成し、リンクテキストとリンクパスはそれのサブセットですか? sankey.jsは、私がアクセスできないポジショニングのためにバックグラウンドで何かをしているように見えるので、これはまだポジショニングの問題を思いついています。 –

+0

@M_Corn check updated answer :)あなたは既にテキストを表示していました。これは、テキストの幅を補うために必要な正確ではないことがわかります。しかしそれはあまりにも難しいはずはありません:)また、yの位置、つまりすべてのテキストがリンクの先頭にあります。あなたが中心に持っていたいなら、あなたはsourceHeightとtargetHeightを取得しなければならないでしょう。それらの平均中心からテキストを翻訳して、テキストが高さだけでなく幅も中心になるように翻訳してください。 – thatOneGuy

+0

ああ、今見ています。ソースとターゲットのデータは私を逃していたものでした。今すぐドラッグしてリンクを移動させることができるかどうかを確認します。 –

関連する問題