I m trying to create doughnut visualization using d3 with fadeout/gradient effect for each arc like this:
我试图添加过滤器: drop(0 0 10px彩色)但并没有给我带来这种影响,而且它也扩散到双方。
So I moved to use two pies
- Outer solid color
- Inner with (hopefully) the fade out effect
我在梯度中知道,我可以说得坚固,但因为我没有一条成功的明确道路,我分成两点。
I ve试图使用线性梯度和安度;在第二皮条上使用rad梯度,这似乎是一个朝向方向迈出的一步,但梯度效应变化是不同的:
就简而言之,由于我不相信这是解决我问题的办法,目前我只为一种颜色建立了梯度过滤器。
I ve added a snippet to help the helpers :)
const colors = [ red , green , purple , blue , orange , teal ]
const data = [10,12,33,112,22,4];
const pie = d3.pie().padAngle(0.03);
const arcs = pie(data);
const svg = d3.select( body )
.append( svg );
const svgDefs = svg.append( defs );
const mainGradient = svgDefs.append( radialGradient )
.attr( id , mainGradient );
mainGradient.append( stop )
.attr( stop-color , red )
.attr( offset , 10% );
mainGradient.append( stop )
.attr( stop-color , pink )
.attr( offset , 90% );
d3.select( body )
.style( position , relative )
.append( svg )
.style( position , absolute )
.style( z-index , 10)
.attr( width , 600)
.attr( height , 600)
.append("g")
.attr("transform", "translate(100,100)")
.selectAll( path )
.data(arcs)
.enter()
.append( path )
.attr( d , (a,b,c) => d3.arc()({...a, innerRadius: 96, outerRadius: 100}))
.style( fill , (d, index) => colors[index])
svg.style( position , absolute )
.attr( width , 600)
.attr( height , 600)
.append("g")
.attr("transform", "translate(100,100)")
.selectAll( path )
.data(arcs)
.enter()
.append( path )
.transition()
.attr( d , (a,b,c) => d3.arc()({...a, innerRadius: 0, outerRadius: 96}))
.style( fill , url(#mainGradient) )
<html>
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.14.2/d3.min.js"></script>
<body>
</body>
</html>