var source_color = d3.scale.category20b();
Function to set the color based on the energy node name.
var source_color = d3.scale.category20b();
Create Sankey
visualization object for United States Energy Data
var us_sankey = new c3.Sankey<USEnergyData, USEnergyLink>({
Bind to the DOM and set the height
anchor: '#us_sankey_flowchart',
height: 600,
Accessor functions to describe how to access the US energy data.
key: (d) => d.name,
value: (d) => d.btu,
link_value: (l) => l.btu,
Set initial node width
node_width: 100,
Create tooltips for the energy name.
node_options: {
title: (d) => d.name + '\n' + d.btu,
animate: true,
},
Style and animate the nodes based on name.
rect_options: {
styles: {
fill: (d) => source_color(d.name),
stroke: 'black',
},
animate: true,
},
Create tooltips for the links between nodes
link_options: {
title: (l) => l.source + " → " + l.target + ": " + l.btu,
},
Style and animate the links between nodes.
path_options: {
styles: {
stroke: 'blue',
opacity: 0.5,
},
animate: true,
},
Add text labels for each node
node_label_options: {
text: (d) => d.name,
styles: {
'font-weight': 'bold',
'text-shadow': '1px 1px 3px whitesmoke',
},
animate: true,
},
});
var uk_node_label_options: c3.SankeyLabelOptions<UKEnergyData>;
Create Sankey
visualization object for United Kingdom Energy Data
var uk_sankey = new c3.Sankey<UKEnergyData, UKEnergyLink>({
Bind to the DOM and set the height
anchor: '#uk_sankey_flowchart',
height: 600,
Accessor functions to describe how to access the UK energy data.
In this case, all of these link accessors happen to be the default, so not strictly required.
Because no key
accessor is provided for the nodes, the key is simply the index into the data array.
Because no value
accessor is provided for the nodes, the value of the node is derived as the
maximum of the input or output links.
link_value: (l) => l.value,
link_source: (l) => l.source,
link_target: (l) => l.target,
Set the nodes to align on both the left and right sides for those nodes without any inputs or outputs respectively.
align: 'both',
Set the default vertical padding between nodes to be 15
pixels.
This could also be set to a string for a percentage, such as 20%
.
node_padding: 15,
Create tooltips for the energy name.
node_options: {
title: (d) => d.name,
},
Style the nodes based on name.
rect_options: {
styles: {
fill: (d) => source_color(d.name.split(' ')[0]),
stroke: 'black',
},
},
Create tooltips for the links between nodes
link_options: {
title: (l) => uk_energy_data.nodes[l.source].name + " → " + uk_energy_data.nodes[l.target].name + ": " + l.value,
},
Style the links between nodes.
path_options: {
styles: {
stroke: 'blue',
opacity: 0.5,
},
},
Add text labels for each node
node_label_options: uk_node_label_options = {
text: (d) => d.name,
styles: {
'font-weight': 'bold',
'text-shadow': '1px 1px 3px whitesmoke',
},
},
});
Resize the charts if the window is resized
window.onresize = function () {
us_sankey.resize();
uk_sankey.resize();
};
Animate flow changes when changing to data for different years
document.getElementById('us_year').addEventListener('change', function () {
let element = <HTMLInputElement>this;
us_sankey.data = us_energy_data[+element.value].nodes;
us_sankey.links = us_energy_data[+element.value].links;
us_sankey.redraw();
});
Enable animation
document.getElementById('us_animate').addEventListener('change', function () {
let element = <HTMLInputElement>this;
us_sankey.node_options.animate = element.checked;
us_sankey.rect_options.animate = element.checked;
us_sankey.path_options.animate = element.checked;
us_sankey.node_label_options.animate = element.checked;
});
IE doesn’t support input
events
for (let event_name of ['input', 'change']) {
Set layout algorithm iterations
document.querySelector('#us_iterations').addEventListener(event_name, function () {
us_sankey.iterations = +this.value;
us_sankey.redraw();
});
Set layout algorithm alpha
document.querySelector('#us_alpha').addEventListener(event_name, function () {
us_sankey.alpha = +this.value;
us_sankey.redraw();
});
Set node width
document.querySelector('#us_node_width').addEventListener(event_name, function () {
us_sankey.node_width = +this.value;
if ((<HTMLInputElement>document.querySelector('input[name=us_node_width_type]:checked')).value === 'percent')
us_sankey.node_width += '%';
us_sankey.redraw();
});
Set node padding
document.querySelector('#us_node_padding').addEventListener(event_name, function () {
us_sankey.node_padding = +this.value;
if ((<HTMLInputElement>document.querySelector('input[name=us_node_padding_type]:checked')).value === 'percent')
us_sankey.node_padding += '%';
us_sankey.redraw();
});
Set link path curvature
document.getElementById('us_link_path_curvature').addEventListener(event_name, function () {
us_sankey.link_path_curvature = +this.value;
us_sankey.redraw();
});
}
Change node width when changing between percent or pixel based units.
for (let radio of document.forms['us_sankey'].elements['us_node_width_type']) {
radio.addEventListener('change', function () {
var event = document.createEvent('HTMLEvents');
event.initEvent('change', true, true);
document.getElementById('us_node_width').dispatchEvent(event);
});
}
Change node padding when changing between percent or pixel based units.
for (let radio of document.forms['us_sankey'].elements['us_node_padding_type']) {
radio.addEventListener('change', function () {
var event = document.createEvent('HTMLEvents');
event.initEvent('change', true, true);
document.getElementById('us_node_padding').dispatchEvent(event);
});
}
Change between straight and curved paths for links.
document.getElementById('us_link_path').addEventListener('change', function () {
let element = <HTMLInputElement>this;
us_sankey.link_path = element.value;
us_sankey.redraw();
NOTE: curved paths should style the stroke
while straight paths should style the fill
.
if (element.value === 'curve')
us_sankey.path_options.styles = { fill: 'none', stroke: 'blue', opacity: 0.5 };
else if (element.value === 'straight')
us_sankey.path_options.styles = { fill: 'green', stroke: 'none', opacity: 0.5 };
us_sankey.restyle();
});
Select horizontal or vertical labels
for (let radio of document.forms['us_sankey'].elements['us_node_label_orientation']) {
radio.addEventListener('change', function () {
us_sankey.node_label_options.orientation = this.value;
us_sankey.redraw();
});
}
Set node alignment justification
document.getElementById('uk_align').addEventListener('change', function () {
let element = <HTMLInputElement>this;
uk_sankey.align = element.value;
uk_sankey.redraw();
});
IE doesn’t support input
events
for (let event_name of ['input', 'change']) {
Set layout algorithm iterations
document.querySelector('#uk_iterations').addEventListener(event_name, function () {
uk_sankey.iterations = +this.value;
uk_sankey.redraw();
});
Set layout algorithm alpha
document.querySelector('#uk_alpha').addEventListener(event_name, function () {
uk_sankey.alpha = +this.value;
uk_sankey.redraw();
});
Set node width
document.querySelector('#uk_node_width').addEventListener(event_name, function () {
uk_sankey.node_width = +this.value;
if ((<HTMLInputElement>document.querySelector('input[name=uk_node_width_type]:checked')).value === 'percent')
uk_sankey.node_width += '%';
uk_sankey.redraw();
});
Set node padding
document.querySelector('#uk_node_padding').addEventListener(event_name, function () {
uk_sankey.node_padding = +this.value;
if ((<HTMLInputElement>document.querySelector('input[name=uk_node_padding_type]:checked')).value === 'percent')
uk_sankey.node_padding += '%';
uk_sankey.redraw();
});
Set link path curvature
document.getElementById('uk_link_path_curvature').addEventListener(event_name, function () {
uk_sankey.link_path_curvature = +this.value;
uk_sankey.redraw();
});
}
Change node width when changing between percent or pixel based units.
for (let radio of document.forms['uk_sankey'].elements['uk_node_width_type']) {
radio.addEventListener('change', function () {
var event = document.createEvent('HTMLEvents');
event.initEvent('change', true, true);
document.getElementById('uk_node_width').dispatchEvent(event);
});
}
Change node padding when changing between percent or pixel based units.
for (let radio of document.forms['uk_sankey'].elements['uk_node_padding_type']) {
radio.addEventListener('change', function () {
var event = document.createEvent('HTMLEvents');
event.initEvent('change', true, true);
document.getElementById('uk_node_padding').dispatchEvent(event);
});
}
Change between straight and curved paths for links.
document.getElementById('uk_link_path').addEventListener('change', function () {
let element = <HTMLInputElement>this;
uk_sankey.link_path = element.value;
uk_sankey.redraw();
NOTE: curved paths should style the stroke
while straight paths should style the fill
.
if (element.value === 'curve')
uk_sankey.path_options.styles = { fill: 'none', stroke: 'blue', opacity: 0.5 };
else if (element.value === 'straight')
uk_sankey.path_options.styles = { fill: 'green', stroke: 'none', opacity: 0.5 };
uk_sankey.restyle();
});
Enable extra data with backedges to demonstrate support for graphs with backedges / cycles
document.getElementById('uk_backedge').addEventListener('change', function () {
let element = <HTMLInputElement>this;
uk_sankey.links = element.checked
? d3.merge([uk_energy_data.links, uk_energy_data_backedges])
: uk_energy_data.links;
uk_sankey.redraw();
});
Enable/disable node labels
document.getElementById('uk_node_labels').addEventListener('change', function () {
let element = <HTMLInputElement>this;
uk_sankey.node_label_options = element.checked ? uk_node_label_options : null;
uk_sankey.redraw();
});
Structure for US energy nodes.
name
for the name of the node.
btu
represents the energy flow in Quads BTU units.
interface USEnergyData {
name: string;
btu: number;
}
Structure for the links between US energy nodes.
source
is the name of the source node for each link.
target
is the name of the target node for each link.
btu
represents the energy flow in Quads BTU units.
interface USEnergyLink {
source: string;
target: string;
btu: number;
}
var us_energy_data = {
2014: {
nodes: [
{ name: "Solar", btu: 0.427 },
{ name: "Nuclear", btu: 8.33 },
{ name: "Hydro", btu: 2.47 },
{ name: "Wind", btu: 1.73 },
{ name: "Geothermal", btu: 0.202 },
{ name: "Natural Gas", btu: 27.5 },
{ name: "Coal", btu: 17.9 },
{ name: "Biomass", btu: 4.78 },
{ name: "Petroleum", btu: 34.8 },
{ name: "Electricity", btu: 38.564 },
{ name: "Imports", btu: 0.164 },
{ name: "Residential", btu: 11.8 },
{ name: "Commercial", btu: 8.93 },
{ name: "Industrial", btu: 24.7 },
{ name: "Transportation", btu: 27.1 },
{ name: "Wasted", btu: 59.4 },
{ name: "Useful", btu: 38.9 },
{ name: "EXTRA NODE", btu: 99999 }, // Demonstrate node with no links is not rendered
], links: [
{ source: "Solar", target: "Electricity", btu: 0.17 },
{ source: "Solar", target: "Residential", btu: 0.252 },
{ source: "Nuclear", target: "Electricity", btu: 8.33 },
{ source: "Hydro", target: "Electricity", btu: 2.44 },
{ source: "Hydro", target: "Industrial", btu: 0.0257 },
{ source: "Wind", target: "Electricity", btu: 1.73 },
{ source: "Geothermal", target: "Electricity", btu: 0.159 },
{ source: "Geothermal", target: "Residential", btu: 0.0197 },
{ source: "Geothermal", target: "Commercial", btu: 0.0197 },
{ source: "Natural Gas", target: "Electricity", btu: 8.37 },
{ source: "Natural Gas", target: "Residential", btu: 5.2 },
{ source: "Natural Gas", target: "Commercial", btu: 3.55 },
{ source: "Natural Gas", target: "Industrial", btu: 9.46 },
{ source: "Natural Gas", target: "Transportation", btu: 0.942 },
{ source: "Coal", target: "Electricity", btu: 16.4 },
{ source: "Coal", target: "Commercial", btu: 0.047 },
{ source: "Coal", target: "Industrial", btu: 1.51 },
{ source: "Biomass", target: "Electricity", btu: 0.507 },
{ source: "Biomass", target: "Residential", btu: 0.58 },
{ source: "Biomass", target: "Commercial", btu: 0.119 },
{ source: "Biomass", target: "Industrial", btu: 2.3 },
{ source: "Biomass", target: "Transportation", btu: 1.27 },
{ source: "Petroleum", target: "Electricity", btu: 0.294 },
{ source: "Petroleum", target: "Residential", btu: 0.945 },
{ source: "Petroleum", target: "Commercial", btu: 0.561 },
{ source: "Petroleum", target: "Industrial", btu: 8.16 },
{ source: "Petroleum", target: "Transportation", btu: 24.8 },
{ source: "Imports", target: "Electricity", btu: .164 },
{ source: "Electricity", target: "Wasted", btu: 25.8 },
{ source: "Electricity", target: "Residential", btu: 4.79 },
{ source: "Electricity", target: "Commercial", btu: 4.63 },
{ source: "Electricity", target: "Industrial", btu: 3.26 },
{ source: "Electricity", target: "Transportation", btu: 0.0265 },
{ source: "Residential", target: "Wasted", btu: 4.12 },
{ source: "Commercial", target: "Wasted", btu: 3.13 },
{ source: "Industrial", target: "Wasted", btu: 4.95 },
{ source: "Transportation", target: "Wasted", btu: 21.4 },
{ source: "Residential", target: "Useful", btu: 7.66 },
{ source: "Commercial", target: "Useful", btu: 5.81 },
{ source: "Industrial", target: "Useful", btu: 19.8 },
{ source: "Transportation", target: "Useful", btu: 5.68 },
]
},
2013: {
nodes: [
{ name: "Solar", btu: 0.32 },
{ name: "Nuclear", btu: 8.27 },
{ name: "Hydro", btu: 2.56 },
{ name: "Wind", btu: 1.6 },
{ name: "Geothermal", btu: 0.201 },
{ name: "Natural Gas", btu: 26.6 },
{ name: "Coal", btu: 18},
{ name: "Biomass", btu: 4.49 },
{ name: "Petroleum", btu: 35.1 },
{ name: "Electricity", btu: 38.379 },
{ name: "Imports", btu: 0.179 },
{ name: "Residential", btu: 11.4 },
{ name: "Commercial", btu: 8.59 },
{ name: "Industrial", btu: 24.7 },
{ name: "Transportation", btu: 27.0 },
{ name: "Wasted", btu: 59 },
{ name: "Useful", btu: 38.4 },
{ name: "EXTRA NODE", btu: 99999 }, // Demonstrate node with no links is not rendered
], links: [
{ source: "Solar", target: "Electricity", btu: 0.0849 },
{ source: "Solar", target: "Residential", btu: 0.232 },
{ source: "Nuclear", target: "Electricity", btu: 8.27 },
{ source: "Hydro", target: "Electricity", btu: 2.53 },
{ source: "Hydro", target: "Industrial", btu: 0.032 },
{ source: "Wind", target: "Electricity", btu: 1.59 },
{ source: "Geothermal", target: "Electricity", btu: 0.157 },
{ source: "Geothermal", target: "Residential", btu: 0.0197 },
{ source: "Geothermal", target: "Commercial", btu: 0.0197 },
{ source: "Natural Gas", target: "Electricity", btu: 8.34 },
{ source: "Natural Gas", target: "Residential", btu: 5.05 },
{ source: "Natural Gas", target: "Commercial", btu: 3.36 },
{ source: "Natural Gas", target: "Industrial", btu: 9.08 },
{ source: "Natural Gas", target: "Transportation", btu: 0.795 },
{ source: "Coal", target: "Electricity", btu: 16.5 },
{ source: "Coal", target: "Commercial", btu: 0.0454 },
{ source: "Coal", target: "Industrial", btu: 1.5 },
{ source: "Biomass", target: "Electricity", btu: 0.465 },
{ source: "Biomass", target: "Residential", btu: 0.42 },
{ source: "Biomass", target: "Commercial", btu: 0.112 },
{ source: "Biomass", target: "Industrial", btu: 2.25 },
{ source: "Biomass", target: "Transportation", btu: 1.24 },
{ source: "Petroleum", target: "Electricity", btu: 0.262 },
{ source: "Petroleum", target: "Residential", btu: 0.893 },
{ source: "Petroleum", target: "Commercial", btu: 0.477 },
{ source: "Petroleum", target: "Industrial", btu: 8.58 },
{ source: "Petroleum", target: "Transportation", btu: 24.9 },
{ source: "Imports", target: "Electricity", btu: .179 },
{ source: "Electricity", target: "Wasted", btu: 25.8 },
{ source: "Electricity", target: "Residential", btu: 4.75 },
{ source: "Electricity", target: "Commercial", btu: 4.57 },
{ source: "Electricity", target: "Industrial", btu: 3.26 },
{ source: "Electricity", target: "Transportation", btu: 0.0257 },
{ source: "Residential", target: "Wasted", btu: 3.98 },
{ source: "Commercial", target: "Wasted", btu: 3.01 },
{ source: "Industrial", target: "Wasted", btu: 4.94 },
{ source: "Transportation", target: "Wasted", btu: 21.3 },
{ source: "Residential", target: "Useful", btu: 7.39 },
{ source: "Commercial", target: "Useful", btu: 5.58 },
{ source: "Industrial", target: "Useful", btu: 19.8 },
{ source: "Transportation", target: "Useful", btu: 5.66 },
]
},
2012: {
nodes: [
{ name: "Solar", btu: 0.0408 },
{ name: "Nuclear", btu: 8.05 },
{ name: "Hydro", btu: 2.69 },
{ name: "Wind", btu: 1.36 },
{ name: "Geothermal", btu: 0.227 },
{ name: "Natural Gas", btu: 26 },
{ name: "Coal", btu: 17.4 },
{ name: "Biomass", btu: 4.32 },
{ name: "Petroleum", btu: 34.7 },
{ name: "Electricity", btu: 38.261 },
{ name: "Imports", btu: 0.161 },
{ name: "Residential", btu: 10.6 },
{ name: "Commercial", btu: 8.29 },
{ name: "Industrial", btu: 23.9 },
{ name: "Transportation", btu: 26.7 },
{ name: "Wasted", btu: 58.1 },
{ name: "Useful", btu: 37 },
{ name: "EXTRA NODE", btu: 99999 }, // Demonstrate node with no links is not rendered
], links: [
{ source: "Solar", target: "Electricity", btu: 0.0408 },
{ source: "Solar", target: "Residential", btu: 0.193 },
{ source: "Nuclear", target: "Electricity", btu: 8.05 },
{ source: "Hydro", target: "Electricity", btu: 2.67 },
{ source: "Hydro", target: "Industrial", btu: 0.018 },
{ source: "Wind", target: "Electricity", btu: 1.36 },
{ source: "Geothermal", target: "Electricity", btu: 0.163 },
{ source: "Geothermal", target: "Residential", btu: 0.0396 },
{ source: "Geothermal", target: "Commercial", btu: 0.0197 },
{ source: "Natural Gas", target: "Electricity", btu: 9.31 },
{ source: "Natural Gas", target: "Residential", btu: 4.26 },
{ source: "Natural Gas", target: "Commercial", btu: 2.96 },
{ source: "Natural Gas", target: "Industrial", btu: 8.7 },
{ source: "Natural Gas", target: "Transportation", btu: 0.764 },
{ source: "Coal", target: "Electricity", btu: 15.9 },
{ source: "Coal", target: "Commercial", btu: 0.0433 },
{ source: "Coal", target: "Industrial", btu: 1.48 },
{ source: "Biomass", target: "Electricity", btu: 0.429 },
{ source: "Biomass", target: "Residential", btu: 0.42 },
{ source: "Biomass", target: "Commercial", btu: 0.109 },
{ source: "Biomass", target: "Industrial", btu: 2.2 },
{ source: "Biomass", target: "Transportation", btu: 1.16 },
{ source: "Petroleum", target: "Electricity", btu: 0.218 },
{ source: "Petroleum", target: "Residential", btu: 1.02 },
{ source: "Petroleum", target: "Commercial", btu: 0.632 },
{ source: "Petroleum", target: "Industrial", btu: 8.12 },
{ source: "Petroleum", target: "Transportation", btu: 24.7 },
{ source: "Imports", target: "Electricity", btu: .161 },
{ source: "Electricity", target: "Wasted", btu: 25.7 },
{ source: "Electricity", target: "Residential", btu: 4.69 },
{ source: "Electricity", target: "Commercial", btu: 4.52 },
{ source: "Electricity", target: "Industrial", btu: 3.35 },
{ source: "Electricity", target: "Transportation", btu: 0.0256 },
{ source: "Residential", target: "Wasted", btu: 3.72 },
{ source: "Commercial", target: "Wasted", btu: 2.9 },
{ source: "Industrial", target: "Wasted", btu: 4.77 },
{ source: "Transportation", target: "Wasted", btu: 21.1 },
{ source: "Residential", target: "Useful", btu: 6.9 },
{ source: "Commercial", target: "Useful", btu: 5.39 },
{ source: "Industrial", target: "Useful", btu: 19.1 },
{ source: "Transportation", target: "Useful", btu: 5.6 },
]
},
2011: {
nodes: [
{ name: "Solar", btu: 0.158 },
{ name: "Nuclear", btu: 8.26 },
{ name: "Hydro", btu: 3.17 },
{ name: "Wind", btu: 1.17 },
{ name: "Geothermal", btu: 0.226 },
{ name: "Natural Gas", btu: 24.9 },
{ name: "Coal", btu: 19.7 },
{ name: "Biomass", btu: 4.41 },
{ name: "Petroleum", btu: 35.3 },
{ name: "Electricity", btu: 39.327 },
{ name: "Imports", btu: 0.127 },
{ name: "Residential", btu: 11.4 },
{ name: "Commercial", btu: 8.59 },
{ name: "Industrial", btu: 23.6 },
{ name: "Transportation", btu: 27 },
{ name: "Wasted", btu: 55.6 },
{ name: "Useful", btu: 41.7 },
{ name: "EXTRA NODE", btu: 99999 }, // Demonstrate node with no links is not rendered
], links: [
{ source: "Solar", target: "Electricity", btu: 0.0175 },
{ source: "Solar", target: "Residential", btu: 0.14 },
{ source: "Nuclear", target: "Electricity", btu: 8.26 },
{ source: "Hydro", target: "Electricity", btu: 3.15 },
{ source: "Hydro", target: "Industrial", btu: 0.0179 },
{ source: "Wind", target: "Electricity", btu: 1.17 },
{ source: "Geothermal", target: "Electricity", btu: 0.163 },
{ source: "Geothermal", target: "Residential", btu: 0.0396 },
{ source: "Geothermal", target: "Commercial", btu: 0.0197 },
{ source: "Natural Gas", target: "Electricity", btu: 7.74 },
{ source: "Natural Gas", target: "Residential", btu: 4.83 },
{ source: "Natural Gas", target: "Commercial", btu: 3.23 },
{ source: "Natural Gas", target: "Industrial", btu: 8.32 },
{ source: "Natural Gas", target: "Transportation", btu: 0.735 },
{ source: "Coal", target: "Electricity", btu: 18 },
{ source: "Coal", target: "Commercial", btu: 0.0512 },
{ source: "Coal", target: "Industrial", btu: 1.61 },
{ source: "Biomass", target: "Electricity", btu: 0.444 },
{ source: "Biomass", target: "Residential", btu: 0.43 },
{ source: "Biomass", target: "Commercial", btu: 0.11 },
{ source: "Biomass", target: "Industrial", btu: 2.27 },
{ source: "Biomass", target: "Transportation", btu: 1.15 },
{ source: "Petroleum", target: "Electricity", btu: 0.288 },
{ source: "Petroleum", target: "Residential", btu: 1.14 },
{ source: "Petroleum", target: "Commercial", btu: 0.683 },
{ source: "Petroleum", target: "Industrial", btu: 8.06 },
{ source: "Petroleum", target: "Transportation", btu: 25.1 },
{ source: "Imports", target: "Electricity", btu: .127 },
{ source: "Electricity", target: "Wasted", btu: 26.6 },
{ source: "Electricity", target: "Residential", btu: 4.86 },
{ source: "Electricity", target: "Commercial", btu: 4.5 },
{ source: "Electricity", target: "Industrial", btu: 3.33 },
{ source: "Electricity", target: "Transportation", btu: 0.026 },
{ source: "Residential", target: "Wasted", btu: 2.29 },
{ source: "Commercial", target: "Wasted", btu: 1.72 },
{ source: "Industrial", target: "Wasted", btu: 4.72 },
{ source: "Transportation", target: "Wasted", btu: 20.3 },
{ source: "Residential", target: "Useful", btu: 9.15 },
{ source: "Commercial", target: "Useful", btu: 6.87 },
{ source: "Industrial", target: "Useful", btu: 18.9 },
{ source: "Transportation", target: "Useful", btu: 6.76 },
]
},
2010: {
nodes: [
{ name: "Solar", btu: 0.13 },
{ name: "Nuclear", btu: 8.4 },
{ name: "Hydro", btu: 2.5 },
{ name: "Wind", btu: 0.92 },
{ name: "Geothermal", btu: 0.210 },
{ name: "Natural Gas", btu: 25 },
{ name: "Coal", btu: 21 },
{ name: "Biomass", btu: 3.5 },
{ name: "Petroleum", btu: 36 },
{ name: "Electricity", btu: 40.029 },
{ name: "Imports", btu: 0.029 },
{ name: "Residential", btu: 12 },
{ name: "Commercial", btu: 8.5 },
{ name: "Industrial", btu: 24 },
{ name: "Transportation", btu: 27 },
{ name: "Wasted", btu: 60 },
{ name: "Useful", btu: 38 },
{ name: "EXTRA NODE", btu: 99999 }, // Demonstrate node with no links is not rendered
], links: [
{ source: "Solar", target: "Electricity", btu: 0.012 },
{ source: "Solar", target: "Residential", btu: 0.110 },
{ source: "Nuclear", target: "Electricity", btu: 8.4 },
{ source: "Hydro", target: "Electricity", btu: 2.5 },
{ source: "Hydro", target: "Commercial", btu: .79 },
{ source: "Hydro", target: "Industrial", btu: 0.016 },
{ source: "Wind", target: "Electricity", btu: 0.92 },
{ source: "Geothermal", target: "Electricity", btu: 0.15 },
{ source: "Geothermal", target: "Residential", btu: 0.037 },
{ source: "Geothermal", target: "Commercial", btu: 0.019 },
{ source: "Geothermal", target: "Industrial", btu: 0.0042 },
{ source: "Natural Gas", target: "Electricity", btu: 7.6 },
{ source: "Natural Gas", target: "Residential", btu: 4.9 },
{ source: "Natural Gas", target: "Commercial", btu: 3.2 },
{ source: "Natural Gas", target: "Industrial", btu: 8.3 },
{ source: "Natural Gas", target: "Transportation", btu: 0.72 },
{ source: "Coal", target: "Electricity", btu: 19 },
{ source: "Coal", target: "Commercial", btu: 0.07 },
{ source: "Coal", target: "Industrial", btu: 1.6 },
{ source: "Biomass", target: "Electricity", btu: 0.46 },
{ source: "Biomass", target: "Residential", btu: 0.44 },
{ source: "Biomass", target: "Commercial", btu: 0.11 },
{ source: "Biomass", target: "Industrial", btu: 1.5 },
{ source: "Biomass", target: "Transportation", btu: 1 },
{ source: "Petroleum", target: "Electricity", btu: 0.38 },
{ source: "Petroleum", target: "Residential", btu: 1.1 },
{ source: "Petroleum", target: "Commercial", btu: 0.65 },
{ source: "Petroleum", target: "Industrial", btu: 8.2 },
{ source: "Petroleum", target: "Transportation", btu: 26 },
{ source: "Imports", target: "Electricity", btu: 0.029 },
{ source: "Electricity", target: "Wasted", btu: 27 },
{ source: "Electricity", target: "Residential", btu: 4.9 },
{ source: "Electricity", target: "Commercial", btu: 4.5 },
{ source: "Electricity", target: "Industrial", btu: 3.33 },
{ source: "Electricity", target: "Transportation", btu: 0.026 },
{ source: "Residential", target: "Wasted", btu: 4 },
{ source: "Commercial", target: "Wasted", btu: 3 },
{ source: "Industrial", target: "Wasted", btu: 4.7 },
{ source: "Transportation", target: "Wasted", btu: 22 },
{ source: "Residential", target: "Useful", btu: 7.5 },
{ source: "Commercial", target: "Useful", btu: 5.6 },
{ source: "Industrial", target: "Useful", btu: 19 },
{ source: "Transportation", target: "Useful", btu: 5.8 },
]
},
2009: {
nodes: [
{ name: "Solar", btu: 0.32 },
{ name: "Nuclear", btu: 8.27 },
{ name: "Hydro", btu: 2.56 },
{ name: "Wind", btu: 1.6 },
{ name: "Geothermal", btu: 0.201 },
{ name: "Natural Gas", btu: 26.6 },
{ name: "Coal", btu: 18 },
{ name: "Biomass", btu: 4.49 },
{ name: "Petroleum", btu: 35.1 },
{ name: "Electricity", btu: 38.379 },
{ name: "Imports", btu: 0.179 },
{ name: "Residential", btu: 11.4 },
{ name: "Commercial", btu: 8.59 },
{ name: "Industrial", btu: 24.7 },
{ name: "Transportation", btu: 27 },
{ name: "Wasted", btu: 59 },
{ name: "Useful", btu: 38.4 },
{ name: "EXTRA NODE", btu: 99999 }, // Demonstrate node with no links is not rendered
], links: [
{ source: "Solar", target: "Electricity", btu: 0.0849 },
{ source: "Solar", target: "Residential", btu: 0.232 },
{ source: "Nuclear", target: "Electricity", btu: 8.27 },
{ source: "Hydro", target: "Electricity", btu: 2.53 },
{ source: "Hydro", target: "Industrial", btu: 0.032 },
{ source: "Wind", target: "Electricity", btu: 1.59 },
{ source: "Geothermal", target: "Electricity", btu: 0.157 },
{ source: "Geothermal", target: "Residential", btu: 0.0197 },
{ source: "Geothermal", target: "Commercial", btu: 0.0197 },
{ source: "Natural Gas", target: "Electricity", btu: 8.34 },
{ source: "Natural Gas", target: "Residential", btu: 5.05 },
{ source: "Natural Gas", target: "Commercial", btu: 3.36 },
{ source: "Natural Gas", target: "Industrial", btu: 9.08 },
{ source: "Natural Gas", target: "Transportation", btu: 0.795 },
{ source: "Coal", target: "Electricity", btu: 16.5 },
{ source: "Coal", target: "Commercial", btu: 0.0454 },
{ source: "Coal", target: "Industrial", btu: 1.5 },
{ source: "Biomass", target: "Electricity", btu: 0.465 },
{ source: "Biomass", target: "Residential", btu: 0.42 },
{ source: "Biomass", target: "Commercial", btu: 0.112 },
{ source: "Biomass", target: "Industrial", btu: 2.25 },
{ source: "Biomass", target: "Transportation", btu: 1.24 },
{ source: "Petroleum", target: "Electricity", btu: 0.262 },
{ source: "Petroleum", target: "Residential", btu: 0.893 },
{ source: "Petroleum", target: "Commercial", btu: 0.477 },
{ source: "Petroleum", target: "Industrial", btu: 8.58 },
{ source: "Petroleum", target: "Transportation", btu: 24.9 },
{ source: "Imports", target: "Electricity", btu: 0.179 },
{ source: "Electricity", target: "Wasted", btu: 25.8 },
{ source: "Electricity", target: "Residential", btu: 4.75 },
{ source: "Electricity", target: "Commercial", btu: 4.57 },
{ source: "Electricity", target: "Industrial", btu: 3.26 },
{ source: "Electricity", target: "Transportation", btu: 0.0257 },
{ source: "Residential", target: "Wasted", btu: 3.98 },
{ source: "Commercial", target: "Wasted", btu: 3.01 },
{ source: "Industrial", target: "Wasted", btu: 4.94 },
{ source: "Transportation", target: "Wasted", btu: 21.3 },
{ source: "Residential", target: "Useful", btu: 7.39 },
{ source: "Commercial", target: "Useful", btu: 5.58 },
{ source: "Industrial", target: "Useful", btu: 19.8 },
{ source: "Transportation", target: "Useful", btu: 5.66 },
]
},
2008: {
nodes: [
{ name: "Solar", btu: 0.09 },
{ name: "Nuclear", btu: 8.45 },
{ name: "Hydro", btu: 2.45 },
{ name: "Wind", btu: 0.51 },
{ name: "Geothermal", btu: 0.35 },
{ name: "Natural Gas", btu: 23.84 },
{ name: "Coal", btu: 22.42 },
{ name: "Biomass", btu: 3.88 },
{ name: "Petroleum", btu: 37.13 },
{ name: "Electricity", btu: 40.08 },
{ name: "Imports", btu: 0.11 },
{ name: "Residential", btu: 11.48 },
{ name: "Commercial", btu: 8.58 },
{ name: "Industrial", btu: 23.94 },
{ name: "Transportation", btu: 27.86 },
{ name: "Wasted", btu: 57.07 },
{ name: "Useful", btu: 42.15 },
{ name: "EXTRA NODE", btu: 99999 }, // Demonstrate node with no links is not rendered
], links: [
{ source: "Solar", target: "Electricity", btu: 0.01 },
{ source: "Solar", target: "Residential", btu: 0.08 },
{ source: "Nuclear", target: "Electricity", btu: 8.45 },
{ source: "Hydro", target: "Electricity", btu: 2.43 },
{ source: "Hydro", target: "Industrial", btu: 0.01 },
{ source: "Wind", target: "Electricity", btu: 0.51 },
{ source: "Geothermal", target: "Electricity", btu: 0.31 },
{ source: "Geothermal", target: "Residential", btu: 0.02 },
{ source: "Geothermal", target: "Commercial", btu: 0.01 },
{ source: "Natural Gas", target: "Electricity", btu: 6.82 },
{ source: "Natural Gas", target: "Residential", btu: 4.99 },
{ source: "Natural Gas", target: "Commercial", btu: 3.2 },
{ source: "Natural Gas", target: "Industrial", btu: 8.14 },
{ source: "Natural Gas", target: "Transportation", btu: 0.67 },
{ source: "Coal", target: "Electricity", btu: 20.54 },
{ source: "Coal", target: "Commercial", btu: 0.06 },
{ source: "Coal", target: "Industrial", btu: 1.79 },
{ source: "Biomass", target: "Electricity", btu: 0.42 },
{ source: "Biomass", target: "Residential", btu: 0.49 },
{ source: "Biomass", target: "Commercial", btu: 0.1 },
{ source: "Biomass", target: "Industrial", btu: 2.03 },
{ source: "Biomass", target: "Transportation", btu: 0.83 },
{ source: "Petroleum", target: "Electricity", btu: 0.46 },
{ source: "Petroleum", target: "Residential", btu: 1.17 },
{ source: "Petroleum", target: "Commercial", btu: 0.57 },
{ source: "Petroleum", target: "Industrial", btu: 8.58 },
{ source: "Petroleum", target: "Transportation", btu: 26.33 },
{ source: "Imports", target: "Electricity", btu: 0.11 },
{ source: "Electricity", target: "Wasted", btu: 27.39 },
{ source: "Electricity", target: "Residential", btu: 4.7 },
{ source: "Electricity", target: "Commercial", btu: 4.61 },
{ source: "Electricity", target: "Industrial", btu: 3.35 },
{ source: "Electricity", target: "Transportation", btu: 0.02 },
{ source: "Residential", target: "Wasted", btu: 2.29 },
{ source: "Commercial", target: "Wasted", btu: 1.71 },
{ source: "Industrial", target: "Wasted", btu: 4.78 },
{ source: "Transportation", target: "Wasted", btu: 20.9 },
{ source: "Residential", target: "Useful", btu: 9.18 },
{ source: "Commercial", target: "Useful", btu: 6.86 },
{ source: "Industrial", target: "Useful", btu: 19.15 },
{ source: "Transportation", target: "Useful", btu: 6.96 },
]
},
};
Render the Sankey Flow Graph with US energy data
us_sankey.render({ data: us_energy_data[2014].nodes, links: us_energy_data[2014].links });
Structure for UK energy nodes
just contain a name
of the node
interface UKEnergyData {
name: string;
}
Structure for UK links between nodes.
source
index of the energy node for the source side of this link.
target
index of the energy node for the target side of this link.
value
of the energy flow through this link.
interface UKEnergyLink {
source: number;
target: number;
value: number;
}
var uk_energy_data = {
nodes: [
{ "name": "Agricultural 'waste'" },
{ "name": "Bio-conversion" },
{ "name": "Liquid" },
{ "name": "Losses" },
{ "name": "Solid" },
{ "name": "Gas" }, // 5
{ "name": "Biofuel imports" },
{ "name": "Biomass imports" },
{ "name": "Coal imports" },
{ "name": "Coal" },
{ "name": "Coal reserves" },
{ "name": "District heating" },
{ "name": "Industry" },
{ "name": "Heating and cooling - commercial" },
{ "name": "Heating and cooling - homes" },
{ "name": "Electricity grid" }, // 15
{ "name": "Over generation / exports" },
{ "name": "H2 conversion" },
{ "name": "Road transport" },
{ "name": "Agriculture" },
{ "name": "Rail transport" },
{ "name": "Lighting & appliances - commercial" },
{ "name": "Lighting & appliances - homes" },
{ "name": "Gas imports" },
{ "name": "Ngas" }, // 24
{ "name": "Gas reserves" },
{ "name": "Thermal generation" },
{ "name": "Geothermal" },
{ "name": "H2" },
{ "name": "Hydro" },
{ "name": "International shipping" },
{ "name": "Domestic aviation" },
{ "name": "International aviation" },
{ "name": "National navigation" },
{ "name": "Marine algae" },
{ "name": "Nuclear" },
{ "name": "Oil imports" },
{ "name": "Oil" }, // 37
{ "name": "Oil reserves" },
{ "name": "Other waste" },
{ "name": "Pumped heat" },
{ "name": "Solar PV" },
{ "name": "Solar Thermal" },
{ "name": "Solar" },
{ "name": "Tidal" },
{ "name": "UK land based bioenergy" },
{ "name": "Wave" },
{ "name": "Wind" }
],
links: [
{ "source": 0, "target": 1, "value": 124.729 },
{ "source": 1, "target": 2, "value": 0.597 },
{ "source": 1, "target": 3, "value": 26.862 },
{ "source": 1, "target": 4, "value": 280.322 },
{ "source": 1, "target": 5, "value": 81.144 },
{ "source": 6, "target": 2, "value": 35 },
{ "source": 7, "target": 4, "value": 35 },
{ "source": 8, "target": 9, "value": 11.606 },
{ "source": 10, "target": 9, "value": 63.965 },
{ "source": 9, "target": 4, "value": 75.571 },
{ "source": 11, "target": 12, "value": 10.639 },
{ "source": 11, "target": 13, "value": 22.505 },
{ "source": 11, "target": 14, "value": 46.184 },
{ "source": 15, "target": 16, "value": 104.453 },
{ "source": 15, "target": 14, "value": 113.726 },
{ "source": 15, "target": 17, "value": 27.14 },
{ "source": 15, "target": 12, "value": 342.165 },
{ "source": 15, "target": 18, "value": 37.797 },
{ "source": 15, "target": 19, "value": 4.412 },
{ "source": 15, "target": 13, "value": 40.858 },
{ "source": 15, "target": 3, "value": 56.691 },
{ "source": 15, "target": 20, "value": 7.863 },
{ "source": 15, "target": 21, "value": 90.008 },
{ "source": 15, "target": 22, "value": 93.494 },
{ "source": 23, "target": 24, "value": 40.719 },
{ "source": 25, "target": 24, "value": 82.233 },
{ "source": 5, "target": 13, "value": 0.129 },
{ "source": 5, "target": 3, "value": 1.401 },
{ "source": 5, "target": 26, "value": 151.891 },
{ "source": 5, "target": 19, "value": 2.096 },
{ "source": 5, "target": 12, "value": 48.58 },
{ "source": 27, "target": 15, "value": 7.013 },
{ "source": 17, "target": 28, "value": 20.897 },
{ "source": 17, "target": 3, "value": 6.242 },
{ "source": 28, "target": 18, "value": 20.897 },
{ "source": 29, "target": 15, "value": 6.995 },
{ "source": 2, "target": 12, "value": 121.066 },
{ "source": 2, "target": 30, "value": 128.69 },
{ "source": 2, "target": 18, "value": 135.835 },
{ "source": 2, "target": 31, "value": 14.458 },
{ "source": 2, "target": 32, "value": 206.267 },
{ "source": 2, "target": 19, "value": 3.64 },
{ "source": 2, "target": 33, "value": 33.218 },
{ "source": 2, "target": 20, "value": 4.413 },
{ "source": 34, "target": 1, "value": 4.375 },
{ "source": 24, "target": 5, "value": 122.952 },
{ "source": 35, "target": 26, "value": 839.978 },
{ "source": 36, "target": 37, "value": 504.287 },
{ "source": 38, "target": 37, "value": 107.703 },
{ "source": 37, "target": 2, "value": 611.99 },
{ "source": 39, "target": 4, "value": 56.587 },
{ "source": 39, "target": 1, "value": 77.81 },
{ "source": 40, "target": 14, "value": 193.026 },
{ "source": 40, "target": 13, "value": 70.672 },
{ "source": 41, "target": 15, "value": 59.901 },
{ "source": 42, "target": 14, "value": 19.263 },
{ "source": 43, "target": 42, "value": 19.263 },
{ "source": 43, "target": 41, "value": 59.901 },
{ "source": 4, "target": 19, "value": 0.882 },
{ "source": 4, "target": 26, "value": 400.12 },
{ "source": 4, "target": 12, "value": 46.477 },
{ "source": 26, "target": 15, "value": 525.531 },
{ "source": 26, "target": 3, "value": 787.129 },
{ "source": 26, "target": 11, "value": 79.329 },
{ "source": 44, "target": 15, "value": 9.452 },
{ "source": 45, "target": 1, "value": 182.01 },
{ "source": 46, "target": 15, "value": 19.013 },
{ "source": 47, "target": 15, "value": 289.366 },
]
};
Cycles / Backedges - Made up data
var uk_energy_data_backedges = [
{ "source": 11, "target": 26, "value": 80 },
];
Render the Sankey Flow Graph with UK energy data
uk_sankey.render({
data: uk_energy_data.nodes,
links: d3.merge([uk_energy_data.links, uk_energy_data_backedges]),
});