A Pen by Steve Pond on CodePen.
Created
July 18, 2015 17:13
-
-
Save stevepond/7b2c0498355127b9d08d to your computer and use it in GitHub Desktop.
WvKJmj
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <p id="chart"> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| var margin = {top: 1, right: 1, bottom: 6, left: 1}, | |
| width = 960 - margin.left - margin.right, | |
| height = 500 - margin.top - margin.bottom; | |
| var formatNumber = d3.format(",.0f"), | |
| format = function(d) { return formatNumber(d) + " TWh"; }, | |
| color = d3.scale.category20(); | |
| var svg = d3.select("#chart").append("svg") | |
| .attr("width", width + margin.left + margin.right) | |
| .attr("height", height + margin.top + margin.bottom) | |
| .append("g") | |
| .attr("transform", "translate(" + margin.left + "," + margin.top + ")"); | |
| var sankey = d3.sankey() | |
| .nodeWidth(15) | |
| .nodePadding(10) | |
| .size([width, height]); | |
| var path = sankey.link(); | |
| jsonData = {"nodes":[ | |
| {"name":"line port 1"}, | |
| {"name":"device port 1"}, | |
| {"name":"device port 2"}, | |
| {"name":"device port 3"}, | |
| {"name":"device port 4"}, | |
| {"name":"device port 5"}, | |
| {"name":"device port 6"}, | |
| {"name":"device port 7"}, | |
| {"name":"device port 8"}, | |
| {"name":"channel 1"}, | |
| {"name":"channel 2"}, | |
| {"name":"channel 3"}, | |
| {"name":"channel 4"}, | |
| {"name":"channel 5"}, | |
| {"name":"channel 6"}, | |
| {"name":"channel 7"}, | |
| {"name":"channel 8"}, | |
| {"name":"line port 2"}, | |
| {"name":"device port 9"}, | |
| {"name":"device port 10"}, | |
| {"name":"device port 11"}, | |
| {"name":"device port 12"}, | |
| {"name":"channel 9"}, | |
| {"name":"channel 10"}, | |
| {"name":"channel 11"}, | |
| {"name":"channel 12"}, | |
| {"name":"channel 13"} | |
| ], | |
| "links":[ | |
| {"source":1,"target":0,"value":1}, | |
| {"source":2,"target":0,"value":1}, | |
| {"source":3,"target":0,"value":1}, | |
| {"source":4,"target":0,"value":1}, | |
| {"source":5,"target":0,"value":1}, | |
| {"source":6,"target":0,"value":1}, | |
| {"source":7,"target":0,"value":1}, | |
| {"source":8,"target":0,"value":1}, | |
| {"source":0,"target":9,"value":1}, | |
| {"source":0,"target":10,"value":1}, | |
| {"source":0,"target":11,"value":1}, | |
| {"source":0,"target":12,"value":1}, | |
| {"source":0,"target":13,"value":1}, | |
| {"source":0,"target":14,"value":1}, | |
| {"source":0,"target":15,"value":1}, | |
| {"source":0,"target":16,"value":1}, | |
| {"source":18,"target":17,"value":1}, | |
| {"source":19,"target":17,"value":1}, | |
| {"source":20,"target":17,"value":1}, | |
| {"source":21,"target":17,"value":1}, | |
| {"source":17,"target":22,"value":1}, | |
| {"source":17,"target":23,"value":1}, | |
| {"source":17,"target":24,"value":1}, | |
| {"source":17,"target":25,"value":1}, | |
| {"source":17,"target":26,"value":1} | |
| ]}; | |
| (function(energy) { | |
| sankey | |
| .nodes(energy.nodes) | |
| .links(energy.links) | |
| .layout(32); | |
| var link = svg.append("g").selectAll(".link") | |
| .data(energy.links) | |
| .enter().append("path") | |
| .attr("class", "link") | |
| .attr("d", path) | |
| .style("stroke-width", function(d) { return Math.max(1, d.dy); }) | |
| .sort(function(a, b) { return b.dy - a.dy; }); | |
| link.append("title") | |
| .text(function(d) { return d.source.name + " → " + d.target.name + "\n" + format(d.value); }); | |
| var node = svg.append("g").selectAll(".node") | |
| .data(energy.nodes) | |
| .enter().append("g") | |
| .attr("class", "node") | |
| .attr("transform", function(d) { return "translate(" + d.x + "," + d.y + ")"; }) | |
| .call(d3.behavior.drag() | |
| .origin(function(d) { return d; }) | |
| .on("dragstart", function() { this.parentNode.appendChild(this); }) | |
| .on("drag", dragmove)); | |
| node.append("rect") | |
| .attr("height", function(d) { return d.dy; }) | |
| .attr("width", sankey.nodeWidth()) | |
| .style("fill", function(d) { return d.color = color(d.name.replace(/ .*/, "")); }) | |
| .style("stroke", function(d) { return d3.rgb(d.color).darker(2); }) | |
| .append("title") | |
| .text(function(d) { return d.name + "\n" + format(d.value); }); | |
| node.append("text") | |
| .attr("x", -6) | |
| .attr("y", function(d) { return d.dy / 2; }) | |
| .attr("dy", ".35em") | |
| .attr("text-anchor", "end") | |
| .attr("transform", null) | |
| .text(function(d) { return d.name; }) | |
| .filter(function(d) { return d.x < width / 2; }) | |
| .attr("x", 6 + sankey.nodeWidth()) | |
| .attr("text-anchor", "start"); | |
| function dragmove(d) { | |
| d3.select(this).attr("transform", "translate(" + d.x + "," + (d.y = Math.max(0, Math.min(height - d.dy, d3.event.y))) + ")"); | |
| sankey.relayout(); | |
| link.attr("d", path); | |
| } | |
| })(jsonData); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <script src="http://d3js.org/d3.v2.min.js?2.9.1"></script> | |
| <script src="http://codepen.io/sapond/pen/VLBxOZ"></script> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #chart { | |
| height: 500px; | |
| } | |
| .node rect { | |
| cursor: move; | |
| fill-opacity: .9; | |
| shape-rendering: crispEdges; | |
| } | |
| .node text { | |
| pointer-events: none; | |
| text-shadow: 0 1px 0 #fff; | |
| } | |
| .link { | |
| fill: none; | |
| stroke: #000; | |
| stroke-opacity: .2; | |
| } | |
| .link:hover { | |
| stroke-opacity: .5; | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment