Рисование сектора диаграммы солнечных лучей с использованием d3.js

Мне нужно нарисовать диаграмму солнечных лучей следующим образом:

введите здесь описание изображения

Как видите, на самом деле это сектор диаграммы солнечных лучей. Могу ли я установить startAngle и endAngle для основного круга/дуги?

Изменить: Моя диаграмма выглядит так: https://bl.ocks.org/mbostock/4063423


person mrbf    schedule 01.07.2016    source источник
comment
Вы должны добавить несколько ссылок для игры, демо/JSFiddle? Также это масштабируемая (bl.ocks.org/mbostock/4348373) или последовательность (bl.ocks.org/kerryrodden/7090426) солнечные лучи?   -  person Elfayer    schedule 01.07.2016


Ответы (2)


Это то, что вы ищите ?

введите здесь описание изображения

Вот сменная часть:

var partition = d3.layout.partition()
    .sort(null)
    .size([Math.PI, radius * radius]) // Previoulsy : .size([2 * Math.PI, radius * radius])
    .value(function(d) { return 1; });

var arc = d3.svg.arc()
    .startAngle(function(d) { return d.x - Math.PI / 2; }) // Previously : .startAngle(function(d) { return d.x; })
    .endAngle(function(d) { return d.x + d.dx - Math.PI / 2; }) // Previously : .endAngle(function(d) { return d.x + d.dx; })
    .innerRadius(function(d) { return Math.sqrt(d.y); })
    .outerRadius(function(d) { return Math.sqrt(d.y + d.dy); });

Посмотреть демонстрацию в реальном времени: JSFiddle

person Elfayer    schedule 01.07.2016
comment
Ах здорово! Можете ли вы наклеить на него этикетки? - person Daniel; 08.12.2018
comment
@Daniel, я предлагаю вам заглянуть сюда: bl.ocks.org/metmajer/5480307, чтобы посмотрите, как интегрировать метки. - person Elfayer; 10.12.2018

Вы определенно можете установить startAngle и endAngle в круг.

см. фрагмент кода из диаграммы солнечных лучей.

var arc = d3.svg.arc()
        .startAngle(function(d) { return Math.max(0, Math.min(2 * Math.PI, x(d.x))); })
        .endAngle(function(d) { return Math.max(0, Math.min(2 * Math.PI, x(d.x + d.dx))); })
        .innerRadius(function(d) { return Math.max(0, d.y ? y(d.y) : d.y); })
        .outerRadius(function(d) { return Math.max(0, y(d.y + d.dy)); });
person Rajesh Kathiriya    schedule 01.07.2016