Я пытаюсь сделать график радиальной области с цветовым градиентом, чтобы отразить это. Однако кажется, что градиент никогда не хочет идеально сидеть на одной линии / на правильной стороне с кругом (см. Изображение ниже).
Я пытался ограничить ширину и высоту svg, чтобы они были равны, но безрезультатно. При каждом обновлении (со случайными данными) центральное кольцо для градиента смещается и деформируется в другую форму, но никогда не лежит на средняя линия, где она должна быть.
Я убедился, что svg квадратный
var width = window.innerWidth , height = window.innerHeight;
width = height = d3.min([width,height])
var data = d3.range(0,100).map(d=>Math.random())
Учитывая градиент следующие свойства
var linearGradient = defs.append("radialGradient")
.attr("id", "rad-gradient")
.attr("cx", "50%") //The x-center of the gradient, same as a typical SVG circle
.attr("cy", "50%") //The y-center of the gradient
.style("r", "50%");
и моя площадь математически как
var area = d3.area()
.x1(function(d,i) { return width/2+Math.cos(i\*angle)*(h(d)) }) .x0(function(d,i) { return > width/2+Math.cos(i\*angle)*(h(mean)) }) .y0(function(d,i) {> return height/2+Math.sin(i\*angle)*(h(mean)) }) .y1(function(d,i) { return height/2+Math.sin(i\*angle)*(h(d)) })
И добавил созданный градиент к пути svg
svg.append("path")
.data([data])
.attr("class", "area")
.attr("d", area)
.style("fill", "url(#rad-gradient)")
.interpolate("basis-closed")
, например - person Alexey G   schedule 29.06.2017