diff --git a/modules/tree.js b/modules/tree.js index 11603570091389ff4db50f5502fe377da9cb2b1d..1a5e532685da477b6872a78d3f409265bc5914b4 100644 --- a/modules/tree.js +++ b/modules/tree.js @@ -51,6 +51,22 @@ function updateTree(filterKey) { console.log(treeData) const root = d3.hierarchy(treeData); + // Funktion, um Skalierungen für finale Knoten pro Ebene zu definieren + function createSizeScale(nodes) { + const values = nodes + .filter(d => !d.children) // Nur Endknoten + .map(d => { + const match = d.data.name.match(/: (\d+)$/); // Extrahiere Wert aus Name + return match ? +match[1] : 0; + }); + return d3.scaleSqrt() + .domain([0, d3.max(values)]) // Min/Max der Werte + .range([5, 40]); // Knotenradius + } + + // Erstelle die Skalierung basierend auf der aktuellen Ebene + const sizeScale = createSizeScale(root.descendants()); + function removeChildren(child) { if (child.children) { child._children = child.children; @@ -98,7 +114,13 @@ function updateTree(filterKey) { node.append("circle") .style("cursor", hierarchyStack.length < 3 ? "pointer" : "") - .attr("r", 5) + .attr("r", d => { + if (!d.children) { // Nur für finale Knoten die Größe anpassen + const match = d.data.name.match(/: (\d+)$/); + return match ? sizeScale(+match[1]) : 5; // Skalierung anwenden + } + return 5; // Standardgröße für interne Knoten + }) .on("click", (event, d) => { if (hierarchyStack.length < 3 && d.depth === 1 || d.depth === 2) { // Go deeper for states or countries d3.select(".tooltip").remove(); @@ -125,7 +147,10 @@ function updateTree(filterKey) { .attr("x", d => { if (d.data.name==="Schengen States") return 46 if (d.children) return -10 - if (!d.children) return 10 + if (!d.children) { // Nur für finale Knoten die Größe anpassen + const match = d.data.name.match(/: (\d+)$/); + return match ? sizeScale(+match[1])+10 : 10; // Skalierung anwenden + } }) .attr("y", d => { if (d.data.name==="Schengen States") return -12