Public
Edited
Jun 21
Insert cell
import {vl} from "@vega/vega-lite-api-v5"
Insert cell
import {printTable} from "@uwdata/data-utilities"
Insert cell
ghgs_inventory = FileAttachment("greenhouse_gas_emissions_inventory.csv").csv()
Insert cell
printTable(ghgs_inventory.slice(0, 5)) // display the first five rows
Insert cell
Insert cell
vl.markPoint({ interpolate: 'basis' })
.data(ghgs_inventory)
.transform(
vl.filter("datum.POLLUTANT != 'GHG' && datum.POLLUTANT != 'CO2' && datum.UNIT_MEASURE == 'T_CO2E'"),
vl.groupby(['POLLUTANT', 'TIME_PERIOD'])
.aggregate(vl.sum('OBS_VALUE').as('Total_Emissions'))
)
.encode(
vl.x().fieldT('TIME_PERIOD').title('Year'),
vl.y()
.fieldQ('Total_Emissions')
.stack('zero')
.title('Total Emissions (Tonnes of CO₂-equivalent)'),
vl.color()
.fieldN('POLLUTANT')
.title('Greenhouse Gas (GHG) Type'),
)
.title('Global Greenhouse Gas Emissions Over Time (by Gas Type)')
.render()
Insert cell
Insert cell
Insert cell
vl.markArea({ interpolate: 'basis' })
.data(ghgs_inventory)
.transform(
vl.filter("datum.POLLUTANT != 'GHG' && datum.POLLUTANT != 'CO2' && datum.UNIT_MEASURE == 'T_CO2E'"),
vl.groupby(['POLLUTANT', 'TIME_PERIOD'])
.aggregate(vl.sum('OBS_VALUE').as('Total_Emissions'))
)
.encode(
vl.x()
.fieldQ('Total_Emissions')
.stack('zero')
.title('Total Emissions (Tonnes of CO₂-equivalent)'),
vl.y().fieldT('TIME_PERIOD').title('Year'),
vl.color()
.fieldN('POLLUTANT')
.title('Greenhouse Gas (GHG) Type')
.scale({
range: ['#a6cce0', '#9fc8dc', '#99c3d9', '#92bfd6', '#8cbad2', '#87b6cf', '#81b2cc']
}),
)
.title('Global Greenhouse Gas Emissions Over Time (by Gas Type)')
.render()
Insert cell
Insert cell
Insert cell
{
// const pollutants = [...new Set(ghgs_inventory.map(d => d.POLLUTANT))].filter(p => p !== 'GHG' && p !== 'CO2');
const pollutants = ['CH4', 'HFC', 'N2O'];
const selection = vl.selectPoint('Select')
.fields(['POLLUTANT'])
.bind(vl.menu(pollutants).name('Select Pollutant: ')); // no init() — so default is "all"

const highlightLine = vl.markRule({ strokeWidth: 2, color: 'black' })
.data([{ TIME_PERIOD: 2020 }])
.encode(vl.x().fieldT('TIME_PERIOD'));
return vl.markArea({ interpolate: 'basis' })
.data(ghgs_inventory)
.transform(
// datum.POLLUTANT != 'GHG' && datum.POLLUTANT != 'CO2'
vl.filter("(datum.POLLUTANT === 'CH4' || datum.POLLUTANT === 'HFC' || datum.POLLUTANT === 'N2O') && datum.UNIT_MEASURE === 'T_CO2E'"),
vl.groupby(['POLLUTANT', 'TIME_PERIOD'])
.aggregate(vl.sum('OBS_VALUE').as('Total_Emissions'))
)
.params(selection)
.encode(
vl.x().fieldT('TIME_PERIOD').title('Year'),
vl.y().fieldQ('Total_Emissions').stack('zero')
.title('Total Emissions (tonnes CO₂-eq)'),
vl.color()
.if(selection, vl.fieldN('POLLUTANT'))
.value('#d3d3d3'), // fallback grey if nothing selected
vl.tooltip([
vl.fieldN('POLLUTANT'),
vl.fieldT('TIME_PERIOD'),
vl.fieldQ('Total_Emissions')
]),
)
.title('Global Greenhouse Gas (GHG) Emissions Over Time (by Gas Type)')
.render();
}

Insert cell
Insert cell
Insert cell
Insert cell

Purpose-built for displays of data

Observable is your go-to platform for exploring data and creating expressive data visualizations. Use reactive JavaScript notebooks for prototyping and a collaborative canvas for visual data exploration and dashboard creation.
Learn more