Limit to single open branch in ForceDirectedSeries
This demo shows how we can use setting-bound event to limit open branches in ForceDirectedSeries to one.
The following code ensures that all open branches are collapsed, when another branch is expanded.
series.nodes.template.on("disabled", function(disabled, targetNode) { let targetLevel = targetNode.dataItem.get("depth"); if (!disabled) { series.nodes.each(function(node) { if (node.dataItem.get("depth") == targetLevel && node !== targetNode) { node.set("disabled", true); } }) }})series.nodes.template.on("disabled", function(disabled, targetNode) { var targetLevel = targetNode.dataItem.get("depth"); if (!disabled) { series.nodes.each(function(node) { if (node.dataItem.get("depth") == targetLevel && node !== targetNode) { node.set("disabled", true); } }) }})/** * --------------------------------------- * This demo was created using amCharts 5. * * For more information visit: * https://www.amcharts.com/ * * Documentation is available at: * https://www.amcharts.com/docs/v5/ * --------------------------------------- */
// Create root element// https://www.amcharts.com/docs/v5/getting-started/#Root_elementvar root = am5.Root.new("chartdiv");
// Set themes// https://www.amcharts.com/docs/v5/concepts/themes/root.setThemes([am5themes_Animated.new(root)]);
// Create wrapper containervar container = root.container.children.push( am5.Container.new(root, { width: am5.percent(100), height: am5.percent(100), layout: root.verticalLayout }));
// Create series// https://www.amcharts.com/docs/v5/charts/hierarchy/#Addingvar series = container.children.push( am5hierarchy.ForceDirected.new(root, { singleBranchOnly: false, downDepth: 1, initialDepth: 1, valueField: "value", categoryField: "name", childDataField: "children", centerStrength: 0.5 }));
series.nodes.template.on("disabled", function (disabled, targetNode) { var targetLevel = targetNode.dataItem.get("depth"); if (!disabled) { series.nodes.each(function (node) { //console.log(node) if (node.dataItem.get("depth") == targetLevel && node !== targetNode) { node.set("disabled", true); } }); }});
// Generate and set data// https://www.amcharts.com/docs/v5/charts/hierarchy/#Setting_datavar maxLevels = 2;var maxNodes = 5;var maxValue = 100;
var data = { name: "Root", children: []};
generateLevel(data, "", 0);
series.data.setAll([data]);series.set("selectedDataItem", series.dataItems[0]);
function generateLevel(data, name, level) { for (var i = 0; i < Math.ceil(maxNodes * Math.random()) + 1; i++) { var nodeName = name + "ABCDEFGHIJKLMNOPQRSTUVWXYZ"[i]; var child; if (level < maxLevels) { child = { name: nodeName + level };
if (level > 0 && Math.random() < 0.5) { child.value = Math.round(Math.random() * maxValue); } else { child.children = []; generateLevel(child, nodeName + i, level + 1); } } else { child = { name: name + i, value: Math.round(Math.random() * maxValue) }; } data.children.push(child); }
level++; return data;}
// Make stuff animate on loadseries.appear(1000, 100);<div id="chartdiv"></div>body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";}
#chartdiv { width: 100%; height: 95vh;}{ "type": "SerialChartContainer", "settings": { "layout": { "type": "VerticalLayout" } }, "properties": { "series": [ "#series-0" ] }, "refs": [ { "data-0": [ { "name": "Root", "children": [ { "name": "A0", "children": [ { "name": "A0A1", "children": [ { "name": "A0A00", "value": 18 }, { "name": "A0A01", "value": 12 }, { "name": "A0A02", "value": 92 }, { "name": "A0A03", "value": 68 } ], "__parse": true }, { "name": "A0B1", "value": 5 }, { "name": "A0C1", "children": [ { "name": "A0C20", "value": 51 }, { "name": "A0C21", "value": 14 }, { "name": "A0C22", "value": 26 } ], "__parse": true }, { "name": "A0D1", "children": [ { "name": "A0D30", "value": 29 }, { "name": "A0D31", "value": 1 }, { "name": "A0D32", "value": 37 }, { "name": "A0D33", "value": 42 }, { "name": "A0D34", "value": 62 } ], "__parse": true } ], "__parse": true }, { "name": "B0", "children": [ { "name": "B1A1", "children": [ { "name": "B1A00", "value": 68 }, { "name": "B1A01", "value": 77 }, { "name": "B1A02", "value": 42 }, { "name": "B1A03", "value": 83 } ], "__parse": true }, { "name": "B1B1", "children": [ { "name": "B1B10", "value": 47 }, { "name": "B1B11", "value": 54 }, { "name": "B1B12", "value": 2 }, { "name": "B1B13", "value": 27 } ], "__parse": true }, { "name": "B1C1", "children": [ { "name": "B1C20", "value": 81 }, { "name": "B1C21", "value": 30 }, { "name": "B1C22", "value": 74 } ], "__parse": true }, { "name": "B1D1", "value": 13 } ], "__parse": true }, { "name": "C0", "children": [ { "name": "C2A1", "children": [ { "name": "C2A00", "value": 76 }, { "name": "C2A01", "value": 7 }, { "name": "C2A02", "value": 33 }, { "name": "C2A03", "value": 85 }, { "name": "C2A04", "value": 72 } ], "__parse": true }, { "name": "C2B1", "children": [ { "name": "C2B10", "value": 77 }, { "name": "C2B11", "value": 33 }, { "name": "C2B12", "value": 16 }, { "name": "C2B13", "value": 49 }, { "name": "C2B14", "value": 22 } ], "__parse": true } ], "__parse": true }, { "name": "D0", "children": [ { "name": "D3A1", "value": 4 }, { "name": "D3B1", "children": [ { "name": "D3B10", "value": 39 }, { "name": "D3B11", "value": 10 } ], "__parse": true } ], "__parse": true } ], "__parse": true } ] }, { "series-0": { "type": "ForceDirected", "settings": { "singleBranchOnly": false, "downDepth": 1, "initialDepth": 1, "valueField": "value", "categoryField": "name", "childDataField": "children", "centerStrength": 0.5, "selectedDataItem": "@self.dataItems.0" }, "properties": { "data": "#data-0" } } } ]}limit-to-single-open-branch-in-forcedirectedseries