C2Task2HackedSankeyAddData

by Cheikh Ba

HTML

<script src="http://bost.ocks.org/mike/sankey/sankey.js"></script>
<div id="chart">
</div>

CSS

.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;
}

JavaScript

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) + " Customers"; },
    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();

energy = {
    "nodes": [{
        "name": "registration"
    }, {
        "name": "trial"
    }, {
        "name": "subscription"
    }, {
        "name": "pay as you go"
    }],
        "links": [{
        "source": 0,
            "target": 1,
            "value": 20
    }, {
        "source": 0,
            "target": 2,
            "value": 30
    }, {
        "source": 0,
            "target": 3,
            "value": 22
    }, {
        "source": 1,
            "target": 2,
            "value": 5
    }, {
        "source": 1,
            "target": 3,
            "value": 5
    }, {
        "source": 3,
            "target": 2,
            "value": 15
    }]
};

  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...