D3.jsの初日は順調ですが、プレースホルダーの円の形を少し複雑なものに変更する必要があります。
Illustratorなどで作成したSVG図形をd3.jsチャートに「インポート」できますか?
D3で再描画できることはわかっていますが、今は頭が痛いです...えーと...
それはポイントのある単純なバブルです:
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="77px" height="41px" viewBox="0 0 77 41" enable-background="new 0 0 77 41" xml:space="preserve">
<path fill-rule="evenodd" clip-rule="evenodd" fill="#999999" d="M0,13C0,5.82,5.82,0,13,0h51c7.18,0,13,5.82,13,13s-5.82,13-13,13
H47l-7,15l-7-15H13C5.82,26,0,20.18,0,13z"/>
</svg>
シェイプとしてインポートできますか?
または、そのパスをd3jsで直接変換する方法はありますか?
ありがとう!
「インポートされた」とは、ページマークアップの一部であり、d3コードで使用されることを意味する場合、はい、 svg defs element を使用してカスタムシェイプの定義を保持できます。次に、コードの後半で、それを参照するためのuse
要素を作成します。
var node = svg.selectAll("g.node")
.data(nodes)
.enter()
.append("g")
.attr("transform", function(d) { return "translate(" + d.y + "," + d.x + ")"; } )
node.append("use")
.attr("xlink:href","#myshape")
上記のアプローチの完全な例を次に示します。 Inkscapeを使用しましたが、概念は同じです。
http://bl.ocks.org/explunit/5988971
Svg定義のxlink名前空間は、use
要素が正しく機能するために重要であり、コードが既にあることがわかります。
xmlns:xlink="http://www.w3.org/1999/xlink"
「インポートされた」とは、オンザフライでロードされることを意味する場合、@ LarsKotthoffによって提案されているように、別のアプローチが必要です。しかし、既存の形状定義を再利用したいように思えます。上記のアプローチでそれを実行できます。 <g>
要素は形状の位置を設定し、次に子ノード<use>
は、前に定義した実際の形状を引き込むために追加されます。
形状の定義は、JavaScript自体ではなく、本体のsvg要素にあります。これは、javascriptコードによって動的に作成されたsvg要素を持つ多くのD3.jsの例とは異なります。
2つの間の唯一の接続は、defs
セクションのIDと一致するようにhref(この場合は "myshape")に入力した文字列IDです。
node.append("use").attr("xlink:href","#myshape")