Spaces:
				
			
			
	
			
			
					
		Running
		
	
	
	
			
			
	
	
	
	
		
		
					
		Running
		
	| <html> | |
| <!-- <div id="dv" class="six columns"> | |
| <iframe id="myFrame" name="myFrame" src="https://seetha-ima-pipeline-streamlit.hf.space?embed=true"></iframe> | |
| </div> --> | |
| <head> | |
| <link rel = "stylesheet" href = "tree.css"> | |
| <link rel = "stylesheet" href = "level2.css"> | |
| <link rel = "stylesheet" href = "side.css"> | |
| <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| <style> | |
| body {background-color: floralwhite;} | |
| </style> | |
| <style> | |
| #d1 { | |
| display: block; | |
| } | |
| #d2 { | |
| display: none; | |
| } | |
| table { | |
| border-collapse: collapse; | |
| table-layout: fixed; | |
| width: 100%; | |
| } | |
| th, td { | |
| border: 1px solid black; | |
| padding: 5px; | |
| text-align: center; | |
| } | |
| tr:hover { | |
| background-color: lightgoldenrodyellow; | |
| } | |
| th{ | |
| position: sticky; | |
| top: 0; | |
| background-color: lightsteelblue; | |
| } | |
| </style> | |
| <center> | |
| <h1 style="color:black;">Causal Text to Knowledge Graph </h1> | |
| </center> | |
| </head> | |
| <body> | |
| <div id = "container"> | |
| <div id = "tree"> | |
| <script src="https://d3js.org/d3.v3.min.js"></script> | |
| <script> | |
| var treeData = [ | |
| { | |
| "name": "Performance or Not", | |
| "children": [ | |
| { | |
| "name": "Performance (P)", | |
| "children": [ | |
| { | |
| "name": "Investors (INV)" | |
| }, | |
| { | |
| "name": "Customers (CUS)" | |
| }, | |
| { | |
| "name": "Employees (EMP)" | |
| }, | |
| { | |
| "name": "Society (SOC)" | |
| }, | |
| { | |
| "name": "Unclassified" | |
| } | |
| ] | |
| }, | |
| { | |
| "name": "Non-performance (NP)", | |
| } | |
| ] | |
| } | |
| ]; | |
| var margin = {top: 20, right: 120, bottom: 20, left: 120}, | |
| width = 800 - margin.right - margin.left, | |
| height = 620 - margin.top - margin.bottom; | |
| var i = 0, | |
| duration = 750, | |
| root; | |
| var tree = d3.layout.tree() | |
| .size([height, width]); | |
| var diagonal = d3.svg.diagonal() | |
| .projection(function(d) { return [d.y, d.x]; }); | |
| var svg3 = d3.select("#tree").append("svg") | |
| .attr("width", width + margin.right + margin.left) | |
| .attr("height", height + margin.top + margin.bottom) | |
| .append("g") | |
| .attr("transform", "translate(" + margin.left + "," + margin.top + ")"); | |
| root = treeData[0]; | |
| root.x0 = height / 2; | |
| root.y0 = 0; | |
| function collapse(d) { | |
| if (d.children) { | |
| d._children = d.children; | |
| d._children.forEach(collapse); | |
| d.children = null; | |
| } | |
| } | |
| root.children.forEach(collapse); | |
| update(root); | |
| function update(source) { | |
| // Compute the new tree layout. | |
| var nodes = tree.nodes(root).reverse(), | |
| links = tree.links(nodes); | |
| // Normalize for fixed-depth. | |
| nodes.forEach(function(d) { d.y = d.depth * 200; }); | |
| // Update the nodes… | |
| var node = svg3.selectAll("g.node") | |
| .data(nodes, function(d) { return d.id || (d.id = ++i); }); | |
| // Enter any new nodes at the parent's previous position. | |
| var nodeEnter = node.enter().append("g") | |
| .attr("class", "node") | |
| .attr("transform", function(d) { return "translate(" + source.y0 + "," + source.x0 + ")"; }) | |
| .on("click", click); | |
| nodeEnter.append("circle") | |
| .attr("r", 1e-6) | |
| .style("fill", function(d) { | |
| if(d.name == "Performance or Not") { | |
| return "white"; | |
| } | |
| else if (d.name != "Non-performance (NP)") { | |
| return "blue"; | |
| } | |
| else { | |
| return "gray"; | |
| } | |
| }); | |
| nodeEnter.append("text") | |
| .attr("x", function(d) { return d.children || d._children ? -10 : 10; }) | |
| .attr("dy", ".35em") | |
| .attr("text-anchor", function(d) { return d.children || d._children ? "end" : "start"; }) | |
| .text(function(d) { return d.name; }) | |
| .style("fill-opacity", 1e-6); | |
| var nodeUpdate = node.transition() | |
| .duration(duration) | |
| .attr("transform", function(d) { return "translate(" + d.y + "," + d.x + ")"; }); | |
| nodeUpdate.select("circle") | |
| .attr("r", 8) | |
| .style("fill", function(d) { | |
| if(d.name == "Performance or Not") { | |
| return "white"; | |
| } | |
| else if (d.name != "Non-performance (NP)") { | |
| return "blue"; | |
| } | |
| else { | |
| return "gray"; | |
| } | |
| }); | |
| nodeUpdate.select("text") | |
| .style("fill-opacity", 1); | |
| // Transition exiting nodes to the parent's new position. | |
| var nodeExit = node.exit().transition() | |
| .duration(duration) | |
| .attr("transform", function(d) { return "translate(" + source.y + "," + source.x + ")"; }) | |
| .remove(); | |
| nodeExit.select("circle") | |
| .attr("r", 1e-6); | |
| nodeExit.select("text") | |
| .style("fill-opacity", 1e-6); | |
| // Update the links… | |
| var link = svg3.selectAll("path.link") | |
| .data(links, function(d) { return d.target.id; }); | |
| // Enter any new links at the parent's previous position. | |
| link.enter().insert("path", "g") | |
| .attr("class", "link") | |
| .attr("d", function(d) { | |
| var o = {x: source.x0, y: source.y0}; | |
| return diagonal({source: o, target: o}); | |
| }); | |
| link.style("stroke","gray"); | |
| // Transition links to their new position. | |
| link.transition() | |
| .duration(duration) | |
| .attr("d", diagonal); | |
| // Transition exiting nodes to the parent's new position. | |
| link.exit().transition() | |
| .duration(duration) | |
| .attr("d", function(d) { | |
| var o = {x: source.x, y: source.y}; | |
| return diagonal({source: o, target: o}); | |
| }) | |
| .remove(); | |
| // Stash the old positions for transition. | |
| nodes.forEach(function(d) { | |
| d.x0 = d.x; | |
| d.y0 = d.y; | |
| }); | |
| console.log(nodes.length); | |
| if(nodes.length ==3){ | |
| var x = document.getElementById("d1"); // Get the graph for Level1 nodes | |
| var y = document.getElementById("d2"); // Get the graph for level 2 nodes | |
| // x.style.display = "block"; // If number of nodes ==3, then you will hide the level 2 graph and display the level 1 graph | |
| // y.style.display = "none"; | |
| var container = document.querySelector(".container"); | |
| // container.style.display = "none"; | |
| } else if(nodes.length >=8){ | |
| var x = document.getElementById("d1"); | |
| var y = document.getElementById("d2"); | |
| x.style.display = "none"; | |
| y.style.display = "block"; | |
| var container = document.querySelector(".container"); | |
| // container.style.display = "none"; | |
| }else if(nodes.length ==1){ | |
| var x = document.getElementById("d1"); | |
| var y = document.getElementById("d2"); | |
| x.style.display = "none"; | |
| y.style.display = "none"; | |
| var container = document.querySelector(".container"); | |
| // container.style.display = "none"; | |
| } | |
| } | |
| // Toggle children on click. | |
| function click(d) { | |
| if (d.children) { | |
| d._children = d.children; | |
| d.children = null; | |
| } else { | |
| d.children = d._children; | |
| d._children = null; | |
| } | |
| update(d); | |
| } | |
| svg3.append("text") | |
| .attr("x", width/2 + 10) | |
| .attr("y", height - 150) | |
| .attr("text-anchor", "middle") | |
| .text("Taxonomy") | |
| .style("font-weight", "bold") | |
| .style("font-family", "Times New Roman") | |
| .style("font-size", "16px") | |
| .style("opacity", 0) | |
| .transition() | |
| .duration(2000) | |
| .style("opacity", 1); | |
| </script> | |
| </div> | |
| <div id="d1"> | |
| <script src="//d3js.org/d3.v3.min.js"></script> | |
| <script> | |
| var width = 620, | |
| height = 570; | |
| // SVG for Level1 graph | |
| var svg = d3.select("#d1").append("svg") | |
| .attr("width", width) | |
| .attr("height", height) | |
| .append("g"); | |
| var nodes1 = [ | |
| {x: width / 4, y: height / 2, label: "Non-Performance"}, | |
| {x: 3 * width / 4, y: height / 2, label: "Performance"} | |
| ]; | |
| var links1 = [ | |
| {source: nodes1[0], target: nodes1[1]} | |
| ]; | |
| var simulation1 = d3.layout.force() | |
| .nodes(d3.values(nodes1)) | |
| .links(links1) | |
| .size([width, height]) | |
| .linkDistance(400) | |
| .charge(-3000) | |
| .start(); | |
| var text1 = svg.append("g") // Append the node node names | |
| .attr("class", "labels") | |
| .selectAll("text") | |
| .data(nodes1) | |
| .enter().append("text") | |
| .text(function(d) { return d.label; }) | |
| .attr("x", function(d) { return d.x+15; }) | |
| .attr("y", function(d) { return d.y+20; }); | |
| var link1 = svg.selectAll(".link") // Links between the nodes in the graph | |
| .data(links1) | |
| .enter() | |
| .append("line") | |
| .attr("class", "link") | |
| .attr("x1", function(d) { return d.source.x; }) | |
| .attr("y1", function(d) { return d.source.y; }) | |
| .attr("x2", function(d) { return d.target.x; }) | |
| .attr("y2", function(d) { return d.target.y; }); | |
| link1.style("stroke","gray") // Color of the link and stroke width | |
| .style("stroke-width",1.5+"px"); | |
| var node1 = svg.append("g") // Nodes in the graph | |
| .attr("class", "nodes") | |
| .selectAll("circle") | |
| .data(nodes1) | |
| .enter().append("circle") | |
| .attr("r", 20) | |
| .style("fill", function(d){ | |
| if(d.label == "Non-Performance"){ | |
| return "gray"; | |
| }else { | |
| return "blue"; | |
| } | |
| }) | |
| .attr("cx", function(d) { return d.x; }) | |
| .attr("cy", function(d) { return d.y; }) | |
| .on("mousedown",mousedown); | |
| //To get the detailed results | |
| function mousedown(d) { | |
| var tableContainer = d3.select('.container'); | |
| tableContainer.remove(); | |
| d3.select("table").remove(); | |
| const nodeName = d.label; | |
| var container = d3.select('body') | |
| .append('div') | |
| .attr('class', 'container') | |
| .style('height', '250px') | |
| .style('overflow', 'auto'); | |
| // Create the table element inside the container | |
| var table = container.append('table') | |
| .attr('class', 'table') | |
| .style('table-layout', 'auto') | |
| // Add a header row | |
| const headerRow = table.append("tr"); | |
| headerRow.append("th").text("Id"); | |
| headerRow.append("th").text("Full Sentence"); | |
| headerRow.append("th").text("Component"); | |
| headerRow.append("th").text("cause/effect"); | |
| headerRow.append("th").text("Label level1"); | |
| headerRow.append("th").text("Label level2"); | |
| // Add a data row for the hovered node | |
| d3.json("detailedResults.json", function(data) { | |
| var table = d3.select("table"); // select the existing table | |
| var tbody = table.append("tbody"); // create a tbody element | |
| // loop through each item in the data array | |
| for (var i = 0; i < data.length; i++) { | |
| console.log(nodeName); | |
| console.log([data[i].Labellevel1]) | |
| if(nodeName == [data[i].Labellevel1]) { | |
| console.log("yipee") | |
| var tr = tbody.append("tr"); // create a table row for each item | |
| // append a table cell with the Id property | |
| tr.append("td").text(data[i].Id); | |
| tr.append("td").text([data[i].Fullsentence]); | |
| tr.append("td").text([data[i].Component]); | |
| tr.append("td").text([data[i].causeOrEffect]); | |
| tr.append("td").text([data[i].Labellevel1]); | |
| tr.append("td").text([data[i].Labellevel2]); | |
| } | |
| } | |
| }); | |
| } | |
| svg.append("text") | |
| .attr("x", width/2 + 10) | |
| .attr("y", height - 150) | |
| .attr("text-anchor", "middle") | |
| .text(" Click on a node to get the detailed results") | |
| .style("font-weight", "bold") | |
| .style("font-family", "Times New Roman") | |
| .style("font-size", "16px") | |
| .style("opacity", 0) | |
| .transition() | |
| .duration(2000) | |
| .style("opacity", 1); | |
| </script> | |
| </div> | |
| <div id="d2"> | |
| <script src="http://d3js.org/d3.v3.min.js"></script> | |
| <script> | |
| // Load the data https://huggingface.co/datasets/Seetha/visual_files/ | |
| d3.json("level2.json", function(data) { | |
| var links = data; | |
| console.log(links) | |
| // Compute the distinct nodes from the links. | |
| links.sort(function(a,b) { | |
| if (a.source > b.source) {return 1;} | |
| else if (a.source < b.source) {return -1;} | |
| else { | |
| if (a.target > b.target) {return 1;} | |
| if (a.target < b.target) {return -1;} | |
| else {return 0;} | |
| } | |
| }); | |
| //any links with duplicate source and target get an incremented 'linknum' | |
| for (var i=0; i<links.length; i++) { | |
| if (i != 0 && | |
| links[i].source == links[i-1].source && | |
| links[i].target == links[i-1].target) { | |
| links[i].linknum = links[i-1].linknum + 1; | |
| } | |
| else {links[i].linknum = 1;}; | |
| }; | |
| var nodes = {}; | |
| // Compute the distinct nodes from the links. | |
| links.forEach(function(link) { | |
| link.source = nodes[link.source] || (nodes[link.source] = {name: link.source}); | |
| link.target = nodes[link.target] || (nodes[link.target] = {name: link.target}); | |
| }); | |
| // width and height of svg | |
| var width = 650, | |
| height = 620; | |
| var force = d3.layout.force() | |
| .nodes(d3.values(nodes)) | |
| .links(links) | |
| .size([width, height]) | |
| .linkDistance(380) | |
| .charge(-3000) | |
| .on("tick", tick) | |
| .start(); | |
| var svg2 = d3.select("#d2").append("svg") | |
| .attr("width", width) | |
| .attr("height", height) | |
| .append("g"); | |
| // Append the arrows | |
| svg2.append("svg:defs").selectAll("marker") | |
| .data(["arrow"]) | |
| .enter().append("svg:marker") | |
| .attr("id", String) | |
| .attr("viewBox", "0 -5 10 10") | |
| .attr("refX", 22) | |
| .attr("refY", -1.8) | |
| .attr("markerWidth", 6) | |
| .attr("markerHeight", 6) | |
| .attr("orient", "auto") | |
| .append("svg:path") | |
| .attr("d", "M0,-5L10,0L0,5") | |
| // Per-type markers, as they don't inherit styles. | |
| var path = svg2.append("svg:g").selectAll("path") | |
| .data(force.links()) | |
| .enter().append("svg:path") | |
| .attr("class", "link") | |
| .attr("id",function(d,i) { return "linkId_" + i; }) | |
| .attr("marker-end", function(d) { | |
| if (d.source.name != d.target.name) { | |
| console.log("arrow"+ "url(#arrow)"); | |
| return "url(#arrow)"; | |
| } else { | |
| return ""; | |
| } | |
| }) | |
| .on("click", function(d) { | |
| console.log("Source: " + d.source.name); | |
| console.log("Target: " + d.target.name); | |
| path.style("stroke-width", 2+"px"); | |
| d3.select(this) | |
| .transition() | |
| .duration(1000) // Animation duration in milliseconds | |
| .style("stroke-width", "3px"); | |
| var nodeTable = document.querySelector(".container"); | |
| nodeTable.style.display = "none"; | |
| d3.select("table").remove(); | |
| var tableContainer = d3.select('.container'); | |
| tableContainer.remove(); | |
| var tableheader = d3.select('.headerRow'); | |
| tableheader.remove(); | |
| const nodeName = d.name; | |
| console.log("Hovering over node:", nodeName); | |
| var container = d3.select('body') | |
| .append('div') | |
| .attr('class', 'container') | |
| .style('height', '250px') | |
| .style('overflow', 'auto'); | |
| var table = container.append('table') | |
| .attr('class', 'table') | |
| .style('table-layout', 'auto') | |
| d3.selectAll('.table td') | |
| .style('font-size', '12px'); | |
| const headerRow = table.append("tr"); | |
| headerRow.append("th").text("Id"); | |
| headerRow.append("th").text("Full Sentence"); | |
| headerRow.append("th").text("Component"); | |
| headerRow.append("th").text("cause/effect"); | |
| headerRow.append("th").text("Label level1"); | |
| headerRow.append("th").text("Label level2"); | |
| d3.json("detailedResults.json", function(data) { | |
| var table = d3.select("table"); // select the existing table | |
| var tbody = table.append("tbody"); // create a tbody element | |
| // loop through each item in the data array | |
| for (var i = 0; i < data.length; i++) { | |
| var lableName = data[i].Labellevel2; | |
| var causeOrEffect = data[i].causeOrEffect; | |
| var id = data[i].Id; | |
| if(lableName == d.source.name && (causeOrEffect == "cause")){ | |
| for (var j = 0; j < data.length; j++) { | |
| if(id == data[j].Id){ | |
| var lableName = data[j].Labellevel2; | |
| var causeOrEffect = data[j].causeOrEffect; | |
| if(lableName == d.target.name && (causeOrEffect == "effect")) { | |
| var tr = tbody.append("tr"); // create a table row for each item | |
| tr.append("td").text(data[i].Id); | |
| tr.append("td").text([data[i].Fullsentence]); | |
| tr.append("td").text([data[i].Component]); | |
| tr.append("td").text([data[i].causeOrEffect]); | |
| tr.append("td").text([data[i].Labellevel1]); | |
| tr.append("td").text([data[i].Labellevel2]); | |
| tr = tbody.append("tr") | |
| // append a table cell with the Id property | |
| tr.append("td").text(data[j].Id); | |
| tr.append("td").text([data[j].Fullsentence]); | |
| tr.append("td").text([data[j].Component]); | |
| tr.append("td").text([data[j].causeOrEffect]); | |
| tr.append("td").text([data[j].Labellevel1]); | |
| tr.append("td").text([data[j].Labellevel2]); | |
| } | |
| } | |
| } | |
| } | |
| } | |
| }); | |
| }); | |
| path.style("stroke-width",function() { // width of the link | |
| return 2 + "px"; | |
| }) | |
| var node = svg2.selectAll(".node") //nodes in the graph | |
| .data(force.nodes()) | |
| .enter().append("g") | |
| .attr("class", "node") | |
| .on("mousedown", mousedown) | |
| .call(force.drag); | |
| var colorScale = d3.scale.linear() | |
| .domain([0, 60]) // Set the domain of the scale to the minimum and maximum possible values of d.value | |
| .range(["#C0C0C0", "black"]); // Set the range of the scale to the minimum and maximum desired colors | |
| path.style("stroke", function(d) { | |
| console.log(d.value+colorScale(d.value)) | |
| return colorScale(d.value); // Use the scale to map the value of d.value to a color | |
| }); | |
| // create a map in order to compute the size of the node | |
| const map1 = new Map(); | |
| for (var nodeName in nodes) { | |
| var sum = 0; | |
| console.log("sum"+nodeName) | |
| links.forEach(function (link) { | |
| if(nodeName == link.source.name || nodeName == link.target.name) { | |
| sum = sum + link.value | |
| } | |
| map1.set(nodeName, sum); | |
| }); | |
| } | |
| const min = Math.min(...map1.values()); | |
| console.log(min); // 👉️ 3 | |
| const max = Math.max(...map1.values()); | |
| console.log(max); | |
| var myScale = d3.scale.linear() | |
| .domain([min, max]) | |
| .range([10, 20]); | |
| node.append("circle") | |
| .attr("r", function(d) { | |
| console.log("radius"+myScale(map1.get(d.name))) | |
| return myScale(map1.get(d.name)); | |
| }) | |
| .style("fill", function(d){ | |
| if(d.name == "Non-performance"){ | |
| return "gray"; | |
| }else{ | |
| return "blue"; | |
| } | |
| }) | |
| .style("stroke", "black") | |
| var text = svg2.append("g").selectAll("text") // Lable of the node | |
| .data(force.nodes()) | |
| .enter().append("text") | |
| .attr("x", 8) | |
| .attr("y", ".31em") | |
| .text(function(d) { return d.name; }); | |
| var linktext = svg2.append("svg:g").selectAll("g.linklabelholder").data(force.links()); | |
| linktext.enter().append("g").attr("class", "linklabelholder") | |
| .append("text") | |
| .attr("class", "linklabel") | |
| .style("font-size", "13px") | |
| .attr("x", "50") | |
| .attr("y", "-20") | |
| .attr("text-anchor", "start") | |
| .style("fill","#000") | |
| .append("textPath") | |
| .attr("xlink:href",function(d,i) { return "#linkId_" + i;}) | |
| .text(function(d) { | |
| return d.value; | |
| }); | |
| // Use elliptical arc path segments to doubly-encode directionality. | |
| function tick() { | |
| path.attr("d", linkArc); | |
| // node.attr("transform", transform); | |
| text.attr("transform", transform); | |
| node | |
| .attr("transform", function(d) { | |
| return "translate(" + d.x + "," + d.y + ")"; }) | |
| path.attr("d", function(d) { | |
| // if(d.value !=0 ) { | |
| var x1 = d.source.x, | |
| y1 = d.source.y, | |
| x2 = d.target.x, | |
| y2 = d.target.y, | |
| dx = x2 - x1, | |
| dy = y2 - y1, | |
| dr = Math.sqrt(dx * dx + dy * dy), | |
| // Defaults for normal edge. | |
| drx = dr, | |
| dry = dr, | |
| xRotation = 5, // degrees | |
| largeArc = 0, // 1 or 0 | |
| sweep = 1; // 1 or 0 | |
| // Self edge. | |
| if (x1 === x2 && y1 === y2) { | |
| // Fiddle with this angle to get loop oriented. | |
| xRotation = -70; | |
| // Needs to be 1. | |
| largeArc = 1; | |
| // Change sweep to change orientation of loop. | |
| sweep = 1; | |
| // Make drx and dry different to get an ellipse | |
| // instead of a circle. | |
| drx = 30; | |
| dry = 15; | |
| // For whatever reason the arc collapses to a point if the beginning | |
| // and ending points of the arc are the same, so kludge it. | |
| x2 = x2 + 1; | |
| y2 = y2 + 1; | |
| } | |
| return "M" + x1 + "," + y1 + "A" + drx + "," + dry + " " + xRotation + "," + largeArc + "," + sweep + " " + x2 + "," + y2; | |
| //} | |
| }); | |
| } | |
| function linkArc(d) { | |
| var dx = d.target.x - d.source.x, | |
| dy = d.target.y - d.source.y, | |
| dr = Math.sqrt(dx * dx + dy * dy); | |
| return "M" + d.source.x + "," + d.source.y + "A" + dr + "," + dr + " 0 0,1 " + d.target.x + "," + d.target.y; | |
| } | |
| function transform(d) { | |
| return "translate(" + d.x + "," + d.y + ")"; | |
| } | |
| function mousedown(d) { | |
| path.style("stroke-width", 2+"px"); | |
| d3.event.stopPropagation(); | |
| // Removes the table first cleans all the div container area in order to append the new table | |
| d3.select("table").remove(); | |
| var tableContainer = d3.select('.container'); | |
| tableContainer.remove(); | |
| var tableheader = d3.select('.headerRow'); | |
| tableheader.remove(); | |
| const nodeName = d.name; | |
| console.log("Hovering over node:", nodeName); | |
| // Create the container to append the table elements both header and body | |
| var container = d3.select('body') | |
| .append('div') | |
| .attr('class', 'container') | |
| .style('height', '250px') | |
| .style('overflow', 'auto'); | |
| // Create the table element inside the container | |
| var table = container.append('table') | |
| .attr('class', 'table') | |
| .style('table-layout', 'auto') | |
| d3.selectAll('.table td') | |
| .style('font-size', '12px'); | |
| // Add a header row | |
| const headerRow = table.append("tr"); | |
| headerRow.append("th").text("Id"); | |
| headerRow.append("th").text("Full Sentence"); | |
| headerRow.append("th").text("Component"); | |
| headerRow.append("th").text("cause/effect"); | |
| headerRow.append("th").text("Label level1"); | |
| headerRow.append("th").text("Label level2"); | |
| // Add a data row for the hovered node | |
| d3.json("detailedResults.json", function(data) { | |
| var table = d3.select("table"); // select the existing table | |
| var tbody = table.append("tbody"); // create a tbody element | |
| // loop through each item in the data array | |
| for (var i = 0; i < data.length; i++) { | |
| if(nodeName == [data[i].Labellevel2]) { // Check for if the nodename that is cliked matches the name in the csv file | |
| var tr = tbody.append("tr"); // create a table row for each item | |
| // append a table cell with the Id property | |
| tr.append("td").text(data[i].Id); | |
| tr.append("td").text([data[i].Fullsentence]); | |
| tr.append("td").text([data[i].Component]); | |
| tr.append("td").text([data[i].causeOrEffect]); | |
| tr.append("td").text([data[i].Labellevel1]); | |
| tr.append("td").text([data[i].Labellevel2]); | |
| } | |
| } | |
| }); | |
| } | |
| // The text that appears below the 5 node graph | |
| svg2.append("text") | |
| .attr("x", width/2 + 10) | |
| .attr("y", height - 30) | |
| .attr("text-anchor", "middle") | |
| .text(" Click on a node to get the detailed results") | |
| .style("font-weight", "bold") | |
| .style("font-family", "Times New Roman") | |
| .style("font-size", "16px") | |
| .style("opacity", 0) | |
| .transition() | |
| .duration(2000) | |
| .style("opacity", 1); | |
| }); | |
| </script> | |
| </div> | |
| </div> | |
| </body> | |
| </html> | |