저는 d3으로 다이어그램을 만들려고 노력해 왔습니다. 그리고 저는 이제 막 조정 한 도넛 형 차트 인 제가 선택한 차트를 보았습니다.d3 조인 및 텍스트 위치 지정을 사용하는 SVG 조작
는 여기에 바이올린을의 http://jsfiddle.net/Qxhzd/1/
그리고 내 코드 :
function jsonToPieSlices(jsonScores) {
data = [];
var total_scores = 0;
for (var i in jsonScores){
total_scores += parseInt(jsonScores[i].score, 10);
}
var factor = 100/total_scores;
var previous_angle = 0;
for (var i in jsonScores) {
current_angle = ((jsonScores[i].score*factor)+previous_angle);
data.push([previous_angle, current_angle, jsonScores[i].color]);
previous_angle = current_angle;
}
return data;
}
function multi_nut() {
var jsonScores = [{'topic': 'Credit Card Processing', 'total_scores': 35, 'scale': 1, 'position': '150,200', 'scores':[
{"color": '#522275', "name": 'site1.com', "score": 7},
{"color": '#5C6BD6', "name": 'site2.com', "score": 18},
{"color": '#FF7D33', "name": 'site3.com', "score": 3},
{"color": '#FFC433', "name": 'site4.com', "score": 2},
{"color": '#41B224', "name": 'site5.com', "score": 2},
{"color": '#36835D', "name": 'site6.com', "score": 3}]},
{'topic': 'Credit Card Reader', 'total_scores': 38, 'scale': 0.409090909, 'position': '650,250', 'scores':[
{"color": '#522275', "name": 'site1.com', "score": 7},
{"color": '#5C6BD6', "name": 'site2.com', "score": 8},
{"color": '#FF7D33', "name": 'site3.com', "score": 8},
{"color": '#FFC433', "name": 'site4.com', "score": 5},
{"color": '#41B224', "name": 'site5.com', "score": 7},
{"color": '#36835D', "name": 'site6.com', "score": 3}]},
{'topic': 'Mobile Payments', 'total_scores': 10, 'scale': 0.318181818, 'position': '900,560', 'scores':[
{"color": '#522275', "name": 'site1.com', "score": 4},
{"color": '#5C6BD6', "name": 'site2.com', "score": 3},
{"color": '#FF7D33', "name": 'site3.com', "score": 1},
{"color": '#FFC433', "name": 'site4.com', "score": 0 },
{"color": '#41B224', "name": 'site5.com', "score": 0},
{"color": '#36835D', "name": 'site6.com', "score": 2}]},
{'topic': 'Android Readers', 'total_scores': 9, 'scale': 0.136363636, 'position': '1950,1700', 'scores':[
{"color": '#522275', "name": 'site1.com', "score": 3},
{"color": '#5C6BD6', "name": 'site2.com', "score": 0},
{"color": '#FF7D33', "name": 'site3.com', "score": 3},
{"color": '#FFC433', "name": 'site4.com', "score": 0},
{"color": '#41B224', "name": 'site5.com', "score": 3},
{"color": '#36835D', "name": 'site6.com', "score": 0}]},
{'topic': 'Iphone Readers', 'total_scores': 22, 'scale': 0.318181818, 'position': '950,850', 'scores':[
{"color": '#522275', "name": 'site1.com', "score": 7},
{"color": '#5C6BD6', "name": 'site2.com', "score": 3},
{"color": '#FF7D33', "name": 'site3.com', "score": 5},
{"color": '#FFC433', "name": 'site4.com', "score": 0},
{"color": '#41B224', "name": 'site5.com', "score": 7},
{"color": '#36835D', "name": 'site6.com', "score": 0}]},
];
var cScale = d3.scale.linear().domain([0, 100]).range([0, 2 * Math.PI]);
var vis = d3.select("#svg_donut");
for (var i in jsonScores) {
data = jsonToPieSlices(jsonScores[i].scores);
var translation = "scale("+jsonScores[i].scale+") translate("+jsonScores[i].position+")"
// if (i==2) alert(translation);
var arc = d3.svg.arc()
.innerRadius(50)
.outerRadius(100)
.startAngle(function(d){return cScale(d[0]);})
.endAngle(function(d){return cScale(d[1]);});
vis.append('g')
.attr('id', "group-"+i)
.attr('class', "node")
.selectAll("path")
.data(data)
.enter()
.append("path")
.attr("d", arc)
.style("fill", function(d){return d[2];})
.attr("transform", translation)
.transition().delay(function(d, i) { return i * 500; }).duration(500)
.attrTween('d', function(d) {
var i = d3.interpolate(d.startAngle+0.1, d.endAngle);
return function(t) {
d.endAngle = i(t);
return arc(d);
}
})
}
multi_nut();
내 질문은 2 배입니다 : I 차트 (현재 I + 1)으로의 수를 얻을 필요가 빠른 수정으로 각 차트의 중심 내 모든 시도는 텍스트가 각 차트가 포함 된 그룹이 아닌 문서에 상대적으로 배치되도록합니다.
큰 그림에서 나는 내가 넣은 끔찍한 루프없이 데이터를 사용하여이 작업을 할 수 있어야한다고 확신한다. 어떤 종류의 버블 레이아웃을 사용합니다.
도움을 주시면 감사하겠습니다!
텍스트를 SVG''요소 또는 HTML 콘텐츠로 추가 하시겠습니까? ' '위치를 다른 SVG 요소와 동일한 위치로 변형 할 수 있기 때문입니다. 그러나 각 아크 경로가 아닌 ''요소에 변형을 적용하면 코드가 더 간단해질 것입니다. 그런 다음 그룹에 텍스트를 추가하고 CSS를 중앙에 배치하고 원하는 위치에 텍스트를 추가해야합니다. –
AmeliaBR
D3의 장점을 최대한 활용하기 위해 코드를 다시 작성하는 방법에 대해서는 다음 예제를 참조하십시오. http://bl.ocks.org/mbostock/1305111 – AmeliaBR
또는 다음은 단계별 자습서입니다. http :// /schoolofdata.org/2013/10/01/pie-and-donut-charts-in-d3-js/ – AmeliaBR