JavaScript
google.charts.load('current', {'packages':['sankey']});
google.charts.setOnLoadCallback(drawChart);
function drawChart() {
var data = new google.visualization.DataTable();
data.addColumn('string', 'From');
data.addColumn('string', 'To');
data.addColumn('number', 'Number');
data.addRows([
[ 'Government', 'Penny', 100 ],
[ 'Government', 'Peter', 100 ],
[ 'Government', 'Roger', 400 ],
[ 'Government', 'Rita', 400 ],
[ 'Penny', 'Tax', 20 ],
[ 'Peter', 'Tax', 20 ],
[ 'Roger', 'Tax', 80 ],
[ 'Rita', 'Tax', 80 ],
[ 'Penny', 'Aldi', 70 ],
[ 'Peter', 'Aldi', 70 ],
[ 'Aldi', 'Tax', 28 ],
[ 'Aldi', 'Farmer Brown', 60 ],
[ 'Aldi', 'Savings+Unspent', 12 ],
[ 'Aldi', 'Alice', 20 ],
[ 'Aldi', 'Andrew', 20 ],
[ 'Alice', 'Tax', 4 ],
[ 'Andrew', 'Tax', 4 ],
[ 'Alice', 'Savings+Unspent', 16 ],
[ 'Andrew', 'Savings+Unspent', 16 ],
[ 'Roger', 'Waitrose', 140 ],
[ 'Rita', 'Waitrose', 140 ],
[ 'Roger', 'Golf Club', 80 ],
[ 'Rita', 'Golf Club', 80 ],
[ 'Penny', 'Savings+Unspent', 10 ],
[ 'Peter', 'Savings+Unspent', 10 ],
[ 'Roger', 'Savings+Unspent', 100 ],
[ 'Rita', 'Savings+Unspent', 100 ],
[ 'Waitrose', 'Tax', 56 ],
[ 'Waitrose', 'Farmer Brown', 140 ],
[ 'Waitrose', 'Savings+Unspent', 24 ],
[ 'Waitrose', 'William', 15 ],
[ 'Waitrose', 'Wendy', 15 ],
[ 'Waitrose', 'Walter', 15 ],
[ 'Waitrose', 'Wanda', 15 ],
[ 'William', 'Tax', 3 ],
[ 'Wendy', 'Tax', 3 ],
[ 'Walter', 'Tax', 3 ],
[ 'Wanda', 'Tax', 3 ],
[ 'William', 'Savings+Unspent', 12 ],
[ 'Wendy', 'Savings+Unspent', 12 ],
[ 'Walter', 'Savings+Unspent', 12 ],
[ 'Wanda', 'Savings+Unspent', 12 ],
[ 'Golf Club', 'Tax', 32 ],
[ 'Golf Club', 'Savings+Unspent', 28 ],
[ 'Golf Club', 'Outsourcing plc', 100 ],
[ 'Outsourcing plc', 'Tax', 20 ],
[ 'Outsourcing plc', 'Savings+Unspent', 20 ],
[ 'Outsourcing plc', 'Olga', 15 ],
[ 'Outsourcing plc', 'Oscar', 15 ],
[ 'Outsourcing plc', 'Owen', 15 ],
[ 'Outsourcing plc', 'Olivia', 15 ],
[ 'Olga', 'Tax', 3 ],
[ 'Oscar', 'Tax', 3 ],
[ 'Owen',...