index.html
<!doctype HTML>
<meta charset = 'utf-8'>
<html>
<head>
<link rel='stylesheet' href='//timelyportfolio.github.io/rCharts_d3_sankey/css/sankey.css'>
<script src='//d3js.org/d3.v3.min.js' type='text/javascript'></script>
<script src='//timelyportfolio.github.io/rCharts_d3_sankey/js/sankey.js' type='text/javascript'></script>
<style>
.rChart {
display: block;
margin-left: auto;
margin-right: auto;
width: 700px;
height: 400px;
}
</style>
</head>
<body>
<div id='chart304462da6790' class='rChart rCharts_d3_sankey'></div>
<script>
(function(){
var params = {
"dom": "chart304462da6790",
"width": 700,
"height": 400,
"data": {
"source": [ "Australian Grand Prix", "Australian Grand Prix", "Australian Grand Prix", "Australian Grand Prix", "Australian Grand Prix", "Australian Grand Prix", "Australian Grand Prix", "Australian Grand Prix", "Australian Grand Prix", "Australian Grand Prix", "Jenson Button", "Sebastian Vettel", "Lewis Hamilton", "Mark Webber", "Fernando Alonso", "Kamui Kobayashi", "Kimi Rikknen", "Sergio Prez", "Daniel Ricciardo", "Paul di Resta", "Malaysian Grand Prix", "Malaysian Grand Prix", "Malaysian Grand Prix", "Malaysian Grand Prix", "Malaysian Grand Prix", "Malaysian Grand Prix", "Malaysian Grand Prix", "Malaysian Grand Prix", "Malaysian Grand Prix", "Malaysian Grand Prix", "Bruno Senna", "Jean-ric Vergne", "Nico Hlkenberg", "Michael Schumacher", "Chinese Grand Prix", "Chinese Grand Prix", "Chinese Grand Prix", "Chinese Grand Prix", "Chinese Grand Prix", "Chinese Grand Prix", "Chinese Grand Prix", "Chinese Grand Prix", "Chinese Grand Prix", "Chinese Grand Prix", "Nico Rosberg", "Romain Grosjean", "Pastor Maldonado", "Bahrain Grand Prix", "Bahrain Grand Prix", "Bahrain Grand Prix", "Bahrain Grand Prix", "Bahrain Grand Prix", "Bahrain Grand Prix", "Bahrain Grand Prix", "Bahrain Grand Prix", "Bahrain Grand Prix", "Bahrain Grand Prix", "Felipe Massa", "Spanish Grand Prix", "Spanish Grand Prix", "Spanish Grand Prix", "Spanish Grand Prix", "Spanish Grand Prix", "Spanish Grand Prix", "Spanish Grand Prix", "Spanish Grand Prix", "Spanish Grand Prix", "Spanish Grand Prix", "Monaco Grand Prix", "Monaco Grand Prix", "Monaco Grand Prix", "Monaco Grand Prix", "Monaco Grand Prix", "Monaco Grand Prix", "Monaco Grand Prix", "Monaco Grand Prix", "Monaco Grand Prix", "Monaco Grand Prix", "Canadian Grand Prix", "Canadian Grand Prix", "Canadian Grand Prix", "Canadian Grand Prix", "Canadian Grand Prix", "Canadian Grand Prix", "Canadian Grand Prix", "Canadian Grand Prix", "Canadian Grand Prix", "Canadian Grand Prix", "European Grand Prix", "European Grand Prix", "European Grand Prix", "European Grand Prix", "European Grand Prix", "European Grand Prix", "European Grand Prix", "European Grand Prix", "European Grand Prix", "European Grand Prix", "British Grand Prix", "British Grand Prix", "British Grand Prix", "British Grand Prix", "British Grand Prix", "British Grand Prix", "British Grand Prix", "British Grand Prix", "British Grand Prix", "British Grand Prix", "German Grand Prix", "German Grand Prix", "German Grand Prix", "German Grand Prix", "German Grand Prix", "German Grand Prix", "German Grand Prix", "German Grand Prix", "German Grand Prix", "German Grand Prix", "Hungarian Grand Prix", "Hungarian Grand Prix", "Hungarian Grand Prix", "Hungarian Grand Prix", "Hungarian Grand Prix", "Hungarian Grand Prix", "Hungarian Grand Prix", "Hungarian Grand Prix", "Hungarian Grand Prix", "Hungarian Grand Prix", "Belgian Grand Prix", "Belgian Grand Prix", "Belgian Grand Prix", "Belgian Grand Prix", "Belgian Grand Prix", "Belgian Grand Prix", "Belgian Grand Prix", "Belgian Grand Prix", "Belgian Grand Prix", "Belgian Grand Prix", "Italian Grand Prix", "Italian Grand Prix", "Italian Grand Prix", "Italian Grand Prix", "Italian Grand Prix", "Italian Grand Prix", "Italian Grand Prix", "Italian Grand Prix", "Italian Grand Prix", "Italian Grand Prix", "Singapore Grand Prix", "Singapore Grand Prix", "Singapore Grand Prix", "Singapore Grand Prix", "Singapore Grand Prix", "Singapore Grand Prix", "Singapore Grand Prix", "Singapore Grand Prix", "Singapore Grand Prix", "Singapore Grand Prix", "Japanese Grand Prix", "Japanese Grand Prix", "Japanese Grand Prix", "Japanese Grand Prix", "Japanese Grand Prix", "Japanese Grand Prix", "Japanese Grand Prix", "Japanese Grand Prix", "Japanese Grand Prix", "Japanese Grand Prix", "Korean Grand Prix", "Korean Grand Prix", "Korean Grand Prix", "Korean Grand Prix", "Korean Grand Prix", "Korean Grand Prix", "Korean Grand Prix", "Korean Grand Prix", "Korean Grand Prix", "Korean Grand Prix", "Indian Grand Prix", "Indian Grand Prix", "Indian Grand Prix", "Indian Grand Prix", "Indian Grand Prix", "Indian Grand Prix", "Indian Grand Prix", "Indian Grand Prix", "Indian Grand Prix", "Indian Grand Prix", "Abu Dhabi Grand Prix", "Abu Dhabi Grand Prix", "Abu Dhabi Grand Prix", "Abu Dhabi Grand Prix", "Abu Dhabi Grand Prix", "Abu Dhabi Grand Prix", "Abu Dhabi Grand Prix", "Abu Dhabi Grand Prix", "Abu Dhabi Grand Prix", "Abu Dhabi Grand Prix", "United States Grand Prix", "United States Grand Prix", "United States Grand Prix", "United States Grand Prix", "United States Grand Prix", "United States Grand Prix", "United States Grand Prix", "United States Grand Prix", "United States Grand Prix", "United States Grand Prix", "Brazilian Grand Prix", "Brazilian Grand Prix", "Brazilian Grand Prix", "Brazilian Grand Prix", "Brazilian Grand Prix", "Brazilian Grand Prix", "Brazilian Grand Prix", "Brazilian Grand Prix", "Brazilian Grand Prix", "Brazilian Grand Prix" ],
"target": [ "Jenson Button", "Sebastian Vettel", "Lewis Hamilton", "Mark Webber", "Fernando Alonso", "Kamui Kobayashi", "Kimi Rikknen", "Sergio Prez", "Daniel Ricciardo", "Paul di Resta", "McLaren", "Red Bull", "McLaren", "Red Bull", "Ferrari", "Sauber", "Lotus F1", "Sauber", "Toro Rosso", "Force India", "Lewis Hamilton", "Mark Webber", "Fernando Alonso", "Kimi Rikknen", "Sergio Prez", "Paul di Resta", "Bruno Senna", "Jean-ric Vergne", "Nico Hlkenberg", "Michael Schumacher", "Williams", "Toro Rosso", "Force India", "Mercedes", "Jenson Button", "Sebastian Vettel", "Lewis Hamilton", "Mark Webber", "Fernando Alonso", "Kamui Kobayashi", "Bruno Senna", "Nico Rosberg", "Romain Grosjean", "Pastor Maldonado", "Mercedes", "Lotus F1", "Williams", "Sebastian Vettel", "Lewis Hamilton", "Mark Webber", "Fernando Alonso", "Kimi Rikknen", "Paul di Resta", "Michael Schumacher", "Nico Rosberg", "Romain Grosjean", "Felipe Massa", "Ferrari", "Jenson Button", "Sebastian Vettel", "Lewis Hamilton", "Fernando Alonso", "Kamui Kobayashi", "Kimi Rikknen", "Nico Hlkenberg", "Nico Rosberg", "Romain Grosjean", "Pastor Maldonado", "Sebastian Vettel", "Lewis Hamilton", "Mark Webber", "Fernando Alonso", "Kimi Rikknen", "Paul di Resta", "Bruno Senna", "Nico Hlkenberg", "Nico Rosberg", "Felipe Massa", "Sebastian Vettel", "Lewis Hamilton", "Mark Webber", "Fernando Alonso", "Kamui Kobayashi", "Kimi Rikknen", "Sergio Prez", "Nico Rosberg", "Romain Grosjean", "Felipe Massa", "Jenson Button", "Mark Webber", "Fernando Alonso", "Kimi Rikknen", "Sergio Prez", "Paul di Resta", "Bruno Senna", "Nico Hlkenberg", "Michael Schumacher", "Nico Rosberg", "Jenson Button", "Sebastian Vettel", "Lewis Hamilton", "Mark Webber", "Fernando Alonso", "Kimi Rikknen", "Bruno Senna", "Michael Schumacher", "Romain Grosjean", "Felipe Massa", "Jenson Button", "Sebastian Vettel", "Mark Webber", "Fernando Alonso", "Kamui Kobayashi", "Kimi Rikknen", "Sergio Prez", "Nico Hlkenberg", "Michael Schumacher", "Nico Rosberg", "Jenson Button", "Sebastian Vettel", "Lewis Hamilton", "Mark Webber", "Fernando Alonso", "Kimi Rikknen", "Bruno Senna", "Nico Rosberg", "Romain Grosjean", "Felipe Massa", "Jenson Button", "Sebastian Vettel", "Mark Webber", "Kimi Rikknen", "Daniel Ricciardo", "Paul di Resta", "Jean-ric Vergne", "Nico Hlkenberg", "Michael Schumacher", "Felipe Massa", "Lewis Hamilton", "Fernando Alonso", "Kamui Kobayashi", "Kimi Rikknen", "Sergio Prez", "Paul di Resta", "Bruno Senna", "Michael Schumacher", "Nico Rosberg", "Felipe Massa", "Jenson Button", "Sebastian Vettel", "Fernando Alonso", "Kimi Rikknen", "Sergio Prez", "Daniel Ricciardo", "Paul di Resta", "Nico Rosberg", "Romain Grosjean", "Felipe Massa", "Jenson Button", "Sebastian Vettel", "Lewis Hamilton", "Mark Webber", "Kamui Kobayashi", "Kimi Rikknen", "Daniel Ricciardo", "Nico Hlkenberg", "Pastor Maldonado", "Felipe Massa", "Sebastian Vettel", "Lewis Hamilton", "Mark Webber", "Fernando Alonso", "Kimi Rikknen", "Daniel Ricciardo", "Jean-ric Vergne", "Nico Hlkenberg", "Romain Grosjean", "Felipe Massa", "Jenson Button", "Sebastian Vettel", "Lewis Hamilton", "Mark Webber", "Fernando Alonso", "Kimi Rikknen", "Bruno Senna", "Nico Hlkenberg", "Romain Grosjean", "Felipe Massa", "Jenson Button", "Sebastian Vettel", "Fernando Alonso", "Kamui Kobayashi", "Kimi Rikknen", "Daniel Ricciardo", "Paul di Resta", "Bruno Senna", "Pastor Maldonado", "Felipe Massa", "Jenson Button", "Sebastian Vettel", "Lewis Hamilton", "Fernando Alonso", "Kimi Rikknen", "Bruno Senna", "Nico Hlkenberg", "Romain Grosjean", "Pastor Maldonado", "Felipe Massa", "Jenson Button", "Sebastian Vettel", "Mark Webber", "Fernando Alonso", "Kamui Kobayashi", "Kimi Rikknen", "Jean-ric Vergne", "Nico Hlkenberg", "Michael Schumacher", "Felipe Massa" ],
"value": [ 25, 18, 15, 12, 10, 8, 6, 4, 2, 1, 188, 281, 190, 179, 278, 60, 207, 66, 10, 46, 15, 12, 25, 10, 18, 6, 8, 4, 2, 1, 31, 16, 63, 49, 18, 10, 15, 12, 2, 1, 6, 25, 8, 4, 93, 96, 45, 25, 4, 12, 6, 18, 8, 1, 10, 15, 2, 122, 2, 8, 4, 18, 10, 15, 1, 6, 12, 25, 12, 10, 25, 15, 2, 6, 1, 4, 18, 8, 12, 25, 6, 10, 2, 4, 15, 8, 18, 1, 4, 12, 25, 18, 2, 6, 1, 10, 15, 8, 1, 15, 4, 25, 18, 10, 2, 6, 8, 12, 18, 10, 4, 25, 12, 15, 8, 2, 6, 1, 8, 12, 25, 4, 10, 18, 6, 1, 15, 2, 25, 18, 8, 15, 2, 1, 4, 12, 6, 10, 25, 15, 2, 10, 18, 4, 1, 8, 6, 12, 18, 25, 15, 8, 1, 2, 12, 10, 6, 4, 12, 25, 10, 2, 15, 8, 1, 6, 4, 18, 25, 1, 18, 15, 10, 2, 4, 8, 6, 12, 10, 25, 12, 15, 18, 6, 1, 4, 2, 8, 12, 15, 18, 8, 25, 1, 2, 4, 10, 6, 10, 18, 25, 15, 8, 1, 4, 6, 2, 12, 25, 8, 12, 18, 2, 1, 4, 10, 6, 15 ]
},
"nodeWidth": 15,
"nodePadding": 10,
"layout": 32,
"units": "points",
"margin": {
"right": 20,
"left": 20,
"bottom": 50,
"top": 20
},
"id": "chart304462da6790"
};
params.units ? units = " " + params.units : units = "";
if (!params.margin) params.margin = {right:50,left:50,bottom:50,top:50};
var formatNumber = d3.format("0,.0f"),
format = function(d) { return formatNumber(d) + units; },
color = d3.scale.category20();
if(params.labelFormat){
formatNumber = d3.format(".2%");
}
var svg = d3.select('#' + params.id).append("svg")
.attr("width", params.width)
.attr("height", params.height);
var sankey = d3.sankey()
.nodeWidth(params.nodeWidth)
.nodePadding(params.nodePadding)
.layout(params.layout)
.size([params.width - params.margin.right - params.margin.left,params.height - params.margin.top - params.margin.bottom]);
var path = sankey.link();
var data = params.data,
links = [],
nodes = [];
data.source.forEach(function (d, i) {
nodes.push({ "name": data.source[i] });
nodes.push({ "name": data.target[i] });
links.push({ "source": data.source[i], "target": data.target[i], "value": +data.value[i] });
});
nodes = d3.keys(d3.nest()
.key(function (d) { return d.name; })
.map(nodes));
links.forEach(function (d, i) {
links[i].source = nodes.indexOf(links[i].source);
links[i].target = nodes.indexOf(links[i].target);
});
nodes.forEach(function (d, i) {
nodes[i] = { "name": d };
});
sankey
.nodes(nodes)
.links(links)
.layout(params.layout);
var link = svg.append("g")
.attr("transform","translate(" + params.margin.right + "," + params.margin.top + ")")
.selectAll(".link").data(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")
.attr("transform","translate(" + params.margin.right + "," + params.margin.top + ")")
.selectAll(".node").data(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); });
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 + " " + format(d.value); })
.filter(function (d) { return d.x < params.width / 2; })
.attr("x", 6 + sankey.nodeWidth())
.attr("text-anchor", "start");
function dragmove(d) {
d3.select(this).attr("transform",
"translate(" + (
d.x = Math.max(0, Math.min(params.width - d.dx, d3.event.x))
) + "," + (
d.y = Math.max(0, Math.min(params.height - d.dy, d3.event.y))
) + ")");
sankey.relayout();
link.attr("d", path);
}
})();
</script>
</body>
</html>