質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
SVG

SVGは、XMLを基盤とした2Dベクター画像記述言語。画像を線・面といった図形の集合体として扱うベクター画像のため、環境に適した表示が可能です。アニメーション機能もサポートされており、簡単なインタラクティブコンテンツ作成もできます。

D3.js

D3.jsとは、データに基づいてHTMLやSVGドキュメントを編集するために作られた、小規模なオープンソースのJavaScript可視化ライブラリです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

2927閲覧

ノード同士で結ばれている辺の太さを変更したい

nano-dia

総合スコア32

SVG

SVGは、XMLを基盤とした2Dベクター画像記述言語。画像を線・面といった図形の集合体として扱うベクター画像のため、環境に適した表示が可能です。アニメーション機能もサポートされており、簡単なインタラクティブコンテンツ作成もできます。

D3.js

D3.jsとは、データに基づいてHTMLやSVGドキュメントを編集するために作られた、小規模なオープンソースのJavaScript可視化ライブラリです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2017/01/20 09:57

編集2017/01/20 10:08

###前提・実現したいこと
jsonファイルを読み出しD3.jsを使ってグラフを書いています。

json

1{ 2"nodes":[ 3{"name":"0"}, 4{"name":"1"} 5], 6"links":[ 7{"source":0, "target":1} 8] 9}

このJSONファイルを読み出したとき,下の図のように0から1に向かうようにしています。
0から1に向かって矢印
ここまではできたのですが,ここからノードをマウスオーバーしたときにノードの線を太くしたいのですが,
マウスオーバーイベント
上の図ように矢印も影響され,大きくなってしまい困っています。辺だけ太くするにはどうしたら良いのでしょうか。
皆さんのお力を貸していただけないでしょうか。よろしくお願いします。
###発生している問題
mouseoverイベント発生させると,矢印も影響してしまう問題。

###該当のソースコード

javascript

1 2<style> 3.node { 4stroke: black; 5stroke-width: 10.5px; 6} 7.link { 8stroke: black; 9} 10.link.active{ 11stroke-width:5px; 12} 13.text { 14width:60px;height:30px;position:absolute; 15} 16</style> 17 18<script> 19d3.json("test.json", function(error, graph) { 20 21nodes = graph.nodes; 22links = graph.links; 23 24force.nodes(nodes) 25.links(links) 26.start(); 27 28link = svg.selectAll("line") 29.data(links) 30.enter().append("line") 31.attr("class", "link") 32.style('marker-end','url(#end-arrow)'); 33 34node = svg.selectAll("circle") 35.data(nodes) 36.enter().append("circle") 37.attr("class", "node") 38.attr("r", 30) 39.style("fill", "black") 40.call(force.drag) 41.on("mouseover", mouseover); 42 43//ノードの名前 44id = svg.selectAll("text.id") 45.data(nodes) 46.enter() 47.append("text") 48.attr("class","id") 49.text(function(d){return d.name;}) 50.attr("font-family", "sans-serif") 51.attr("font-size", "35px") 52.attr("text-anchor","middle") 53.attr("fill", "white") 54.attr("font-weight", "bold") 55.attr("stroke","black") 56.call(force.drag) 57 58 59/*矢印*/ 60svg.append('svg:defs').append('svg:marker') 61.attr('id', 'end-arrow') 62.attr('viewBox', '-10 -10 15 20') 63.attr('refX', 12) 64.attr('markerWidth', 90) 65.attr('markerHeight', 60) 66.attr('orient', 'auto') //矢印の向き 67.append('svg:path') 68.attr('d', 'M-10,-5L0,0L-10,5') 69.attr('fill', 'red'); 70 71 72function mouseover(d) { 73 svg.selectAll("line").classed("active", function(p) { 74 return (d.name===p.source.name) || (d.name===p.target.name) 75 }); 76 77} 78 79 80}); 81<\script>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

marker要素にmarkerUnits=userSpaceOnUseを追加し, マーカー図形が線の太さに依存しないようにします

javascript

1svg.append('svg:defs').append('svg:marker') 2.attr('id', 'end-arrow') 3.attr('viewBox', '-10 -10 15 20') 4.attr('refX', 12) 5.attr('markerWidth', 90) 6.attr('markerHeight', 60) 7.attr('markerUnits', 'userSpaceOnUse') 8.attr('orient', 'auto') //矢印の向き 9.append('svg:path') 10.attr('d', 'M-10,-5L0,0L-10,5') 11.attr('fill', 'red');

投稿2017/01/30 23:45

defghi1977

総合スコア4756

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nano-dia

2017/02/08 06:18

ありがとうございます。 プログラムに追加してみると,綺麗に描画できることができました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問