chart = {
const root = tree(d3.hierarchy(data)
.sort((a, b) => d3.descending(a.data.value, b.data.value))
);
const links = root.links();
const nodes = root.descendants();
setColor(root);
const svg = d3.create("svg")
.attr("viewBox", [-width / 2, -height / 2, width, height]);
const link = svg.append("g")
.attr("fill", "none")
.attr("stroke", "grey")
.attr("stroke-opacity", 0.4)
.attr("stroke-width", 1.5)
.selectAll("path")
.data(links)
.join("path")
.attr("d", d3.linkRadial()
.angle(d => d.x)
.radius(d => d.y))
.each(function(d) { d.target.linkNode = this; })
.attr("stroke", d => d.target.color);
const node = svg.append("g")
.selectAll("circle")
.data(nodes)
.join("circle")
.attr("transform", d => `
rotate(${d.x * 180 / Math.PI - 90})
translate(${d.y},0)
`)
.attr("fill", d => d.children ? color(d.data.name) : color(d.data.group))
//uncomment the following line to show circles with different opacities
//.attr("fill-opacity", d => d.children ? 1 : CircleAlpha(d.data.value))
.attr("r", d => d.children ? 4 : 0);
const titre = svg.append("g")
.selectAll("text")
.data(nodes)
.join("text")
.attr("font-family", "sans-serif")
.attr("font-size", "0.65em")
//.attr("stroke-linejoin", "round")
//.attr("stroke-width", 3)
.attr("transform", d => `
rotate(${d.x * 180 / Math.PI - 90})
translate(${d.y},0)
rotate(${d.x >= Math.PI ? 180 : 0})
`)
.attr("dy", "0em")
.attr("dx", "1.2em")
.attr("x", d => d.x < Math.PI === !d.children ? 6 : -6)
// this line modifies the text direction of the anchor
//.attr("text-anchor", d => d.x < Math.PI === !d.children ? "start" : "end")
.attr("visibility", d => d.children ? null : "hidden")
.text(d => d.data.name)
.clone(true).lower()
.attr("stroke", "rgba(255,255,255,1)");
const affiche = svg.append("g")
.selectAll("image")
.data(nodes)
.join("image")
.attr("width", 40)
.attr("height", 50)
.attr("transform", d => `
rotate(${d.x * 180 / Math.PI - 90})
translate(${d.y},0)
rotate(${d.x >= Math.PI ? 180 : 0})
`)
.attr("x", d => d.x < Math.PI === !d.children ? 6 : -6)
.attr("y", d => d.y < Math.PI === !d.children ? 6 : -6)
.attr("href", d => d.data.name);
affiche;
node.append("title")
.text(d => d.data.name);
titre
.attr("x", d => d.x)
.attr("y", d => d.y);
link
.attr("x1", d => d.source.x)
.attr("y1", d => d.source.y)
.attr("x2", d => d.target.x)
.attr("y2", d => d.target.y);
return svg.node();
}