Я работаю над проектом, который занимается визуальным представлением больших реляционных данных. Мы используем круговую диаграмму для отображения компонентов данных (в порядке). Из-за нехватки места мы показываем только 10 за раз.Читать внутренний и внешний радиус дуги - d3.js
Рассмотрим следующий пример:
Предположим, что у меня есть 100 данных компонентов, из которых я только 10 просмотров на данный момент времени. Логика, которую я использую, я устанавливаю начальный и конечный угол равным 0 (ноль) для других 90 компонентов. Если в течение этих 10 компонентов я расчет начальный и конечный угол, как
ценам нижеvar angle = 360;
var count = 10;
if(data.length > count) angle = angle/count; //data is array of data component names
else angle = angle/data.length;
//Initially I'll be displaying first ten components
for(var i=0; i<data.length; i++){
var startAngle = i * angle;
var endAngle = startAngle + angle;
var pi = = Math.PI/180;
var arc = d3.svg.arc()
.innerRadius(innerRadius) //dynamic value, calculated based on available space
.outerRadius(outerRadius) //dynamic value, calculated based on available space
.startAngle((startAngle)*pi)
.endAngle((endAngle)*pi);
//Hiding rest of the data components
if(i >= count){
arc.startAngle(0);
arc.endAngle(0);
}
arcGroup.append("path")
.attr("d", arc)
.attr("stroke", "#2E2E2E")
.attr("stroke-width", "1")
.attr("fill","gold");
var text = arcGroup.append("text")
.attr("transform", "translate(" + arc.centroid() + ")")
.attr("text-anchor", "middle")
.attr("font-family","noto_sansregular")
.attr("font-size", 40)
.attr("font-weight","Bold")
.attr("fill", "#000000")
.attr("y",0)
.style("visibility", "visible")
.text(data[i]);
//Hiding text of hidden arcs
if(i >= count) text.style("visibility", "hidden");
}
Затем, если пользователь хочет, чтобы увидеть остальные компоненты, я обеспечиваю две кнопки для вращения (часы или анти- часы).
Если текущая точка зрения -> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
На поворот одной клеточной по часовой стрелке, в результате чего вид должен быть -> 100, 1, 2, 3, 4, 5, 6, 7, 8, 9
В этом случае мне нужно скрыть компонент «10» и компонент отображения «100» и сдвинуть остаток ячеек. Для этого мне просто нужно изменить начальный и конечный углы дуг. Я могу создать новый объект дуги с расчетными углами.
Проблема в том, что я не знаю, как получить внутренний и внешний радиус дуги, которые динамически создаются.
Спасибо @MaxDy – Ajax1986