chart = {
const svg = d3.create('svg').attr('id','svg-vis1').attr('class', 'svg-vis').attr("viewBox", [0, 0, width, height]).style('background', background_c)
svg.selectAll('circle').data(plastic_waste_world_sort).enter().append('circle').attr('transform', x => `translate(${width/2},${height*0.65}) rotate(${arc_scaler(x.Entity)-90})`)
.attr("cx", x => stem_scaler(x.mismanaged_pw_capita) + total_pw_scaler(x.pw_total) + leaf_scaler(x.mismanaged_pw_total) + 10)
.attr("cy", 0)
.attr("r", x => total_pw_scaler(x.pw_total))
.attr('stroke-width', 2).attr('stroke', primary)
.style("fill", secondary)
.attr("opacity", 0.4)
const groups = svg.selectAll('g').data(plastic_waste_world_sort).enter().append('g').attr('transform', x => `translate(${width/2},${height*0.65}) rotate(${arc_scaler(x.Entity)-90})`)
groups.append('path').attr('transform', `rotate(${90}, 0, 0)`).attr('d', x => {
const stem = stem_scaler(x.mismanaged_pw_capita)+1
const p_width = leaf_scaler(x.mismanaged_pw_total)+3
return `M 0 -${inner_radius} C -${0} -${stem-p_width} -${p_width}
-${stem-p_width} -${p_width} -${stem} C -${p_width} -${stem+p_width*1.3} ${p_width} -${stem+p_width*1.3} ${p_width} -${stem} C ${p_width} -${stem-p_width} 0 -${stem-p_width} 0 -${inner_radius}`
}).style("fill",primary).attr('stroke', primary).attr('stroke-width', 0.2).attr('opacity', 1)
groups.append('path').attr('transform', `rotate(${90}, 0, 0)`).attr('d', x => {
let total_pw_len = total_pw_scaler(x.pw_total) ? total_pw_scaler(x.pw_total) : 1
let total_len = stem_scaler(x.mismanaged_pw_capita) + total_pw_len*2 + leaf_scaler(x.mismanaged_pw_total) + 20
return `M 0 -${inner_radius} L 0 -${total_len}`
}).attr('stroke-width', 0.2)
.style("stroke", neutral)
svg.append("g").attr("transform", `translate(${260/4}, ${50})`)
.call(legend);
svg.append("g").attr("transform", `translate(${260/4}, ${500})`)
.call(legend2);
svg
.append("g")
.attr("class", "axis axis--x")
.attr(
"transform",
`translate(${width/2}, ${height*0.65}) rotate(170, 0, 0)`
)
.call(xAxis);
groups.append('text').attr('x', x => {
let total_pw_len = total_pw_scaler(x.pw_total) ? total_pw_scaler(x.pw_total) : 1
let total_len = stem_scaler(x.mismanaged_pw_capita) + total_pw_len*2 + leaf_scaler(x.mismanaged_pw_total) + 30
return total_len
}).attr('y', 3).text(x => x.Entity).style('font-size', '0.65rem')
.attr('transform', d =>
{
let total_pw_len = total_pw_scaler(d.pw_total) ? total_pw_scaler(d.pw_total) : 1
let total_len = stem_scaler(d.mismanaged_pw_capita) + total_pw_len*2 + leaf_scaler(d.mismanaged_pw_total) + 30
return arc_scaler(d.Entity) > 180 ? `rotate(-180, ${total_len}, 0)` :`rotate(-360,${total_len},0)`
}
)
.attr('text-anchor', d => arc_scaler(d.Entity) > 180 ? `end` :`begin`)
.style('font-family',"Roboto").attr('fill', neutral)
groups.append('circle')
.attr("cx", x => stem_scaler(x.mismanaged_pw_capita))
.attr("cy", 0)
.attr("r", x => leaf_scaler(x.mismanaged_pw_total))
.attr('stroke-width', 1)
.style("fill",'#293241')
.attr("opacity", 0.7)
groups.append('circle')
.attr("cx", x => stem_scaler(x.mismanaged_pw_capita) + total_pw_scaler(x.pw_total) + leaf_scaler(x.mismanaged_pw_total) + 10)
.attr("cy", 0)
.attr("r", 1)
.style("fill",'black')
.attr("opacity", 1)
groups.append('circle')
.attr("cx", x => stem_scaler(x.mismanaged_pw_capita))
.attr("cy", 0)
.attr("r", 1)
.style("fill",'white')
.attr("opacity", 0.6)
groups.append('circle')
.attr('cx', x => {
let total_pw_len = total_pw_scaler(x.pw_total) ? total_pw_scaler(x.pw_total) : 1
let total_len = stem_scaler(x.mismanaged_pw_capita) + total_pw_len*2 + leaf_scaler(x.mismanaged_pw_total) + 20
return total_len
})
.attr("cy", 0)
.attr("r", 1)
.style("fill",'black')
.attr("opacity", 1)
return svg.node()
}