2017-08-28 12 views
-3

d3jsを使用して下の画像を作成するのに助けてくれる人がいますか?必要に応じて円グラフを作成することができましたが、外側のテキストを矢印やすべてでレンダリングするために固執しました。私はコードの下に使用してサークルの作成を達成したノウハウのとおりsvg - 円弧の外側のテキストの整列d3js

Wheel with outer text

var svg = d3.select("svg"); 
var margin = {top: 40, right: 45, bottom: 30, left: 40}; 
console.log(svg); 
var width = svg.attr('width'); 

var height = svg.attr('height'); 


var radius = Math.min(width, height)/2; 
var g = svg.append("g").attr("transform", "translate(" + width/2 + "," + height/2 + ")"); 
var hoverStyle = { 
    zindex: '2px' 
}; 

var hoverExitStyle = { 
    zindex: "0px" 
} 

var animateSpeed = 500; 

// Define a Pie 
var pie = d3.pie() 
    .sort(null) 
    .value(function(d) {return d.number}); 

// define pie section 
var path = d3.arc() 
    .outerRadius(radius - 10) 
    .innerRadius(0); 

// 
var label = d3.arc() 
    .outerRadius(radius - 40) 
    .innerRadius(radius - 40); 

// Get pie sections based on the data. 
var pieSections = pie(data); 

var arc = g.selectAll('.arc') 
    .data(pieSections) 
    .enter().append("g") 
    .attr("class", "arc") 
    .append('a') 
    .attr("href", function(d) { return d.data.url; }); 

arc.append("path") 
    .attr("d", path).transition() 
    .attr("fill", function(d) { return d.data.color; }); 

arc.append("text") 
    .attr("transform", function(d) { return "translate(" + label.centroid(d) + ")"; }) 
    .attr("dy", "0.35em") 
    .text(function(d) { return d.data.title; }); 
+3

これに応じて、あなたが支払うことができれば、これを手助けすることができる人がたくさんいます。 Stack Overflowコミュニティの無料のヘルプが必要な場合は、しばらく時間を取って[質問]と[mcve]の提供方法を​​学んでください。このサイトのルールでは、努力を示し、少なくともコードの関連部分を提供する必要があります。 – altocumulus

+1

将来私はすべてのルールに注意し、ここで何か間違っていたら私の謝罪を受け入れてください。これは私がstackoverflowで尋ねた最初の質問です。 – Shubham

+3

OPは、これらのものの両方の作業量(湾曲したテキストと矢じり)がどれほどか分からないでしょう。彼らはおそらく彼らが探しているはずのGoogle用語を知らない。 @Shubham、あなたは別の言い方で言えば、あまりにも多くの薄片を捕まえることはできません。つまり、「このようなカーブしたラベルを作成するにはどうすればいいですか?あなたがそれを表現する方法は、「私にとってはこの2つの困難なことの両方を行う」ということから始まります。常に誰かがあなたに解決策を与えるためではなく、誰もが皆を助けることではなく、後者は皆を含めてすべての人に不利益を与えます。 – yasashiku

答えて

0

テキストと矢印は、おそらくそれぞれ独自の質問に値する2つの別々の懸念事項です。

はD3とのパス上のテキストを行うように湾曲したテキスト、あなたはtextpathドキュメントを見たいかもしれません。それはややこしいでしょう。基本的には、少し外側の半径を持つジェネレータd3.arc()ジェネレータを作成したいと思うでしょう。 SVGのdefsオブジェクトの中にpath要素(作成する必要がある)のd属性を設定し、path要素のidtextpath要素(作成する必要があります)から参照してください。まさに画像のように、これを達成するために

曲線の矢印 、あなたはおそらく(数学を考え出す含む!)いくつかの手動構築する必要があるとしているdの適切な矢印を追加するには、自分の属性(SVGパスを参照してくださいsyntax)。静的なイメージを作成している場合は、線を作成して(より長い半径のd3.arc()ジェネレータを使用して)、より速く、SVG crowbarなどのSVGをIllustratorやInkscapeなどの描画プログラムにエクスポートし、そこに矢頭。

関連する問題