Figure 0. Banner: an original cinematic graphic created for this
article — a coal-fired power station and transmission lines silhouetted
against the setting sun, evoking the “land of sun and coal” theme.
Generated with generative AI (Claude; Anthropic, 2026). (To use a
documentary photograph instead, replace banner.jpg
and update this credit.)
Land of sun and coal: why Australia still emits like a petrostate and what’s finally starting to shift
We are one of the sunniest nations on Earth, yet we still pump out more carbon per person than almost any country that isn’t sitting on an oilfield. Five charts reveal the paradox at the heart of Australia’s climate story — and the quiet revolution now underway on our rooftops.
When we picture the world’s worst polluters, we tend to picture somewhere else — a smog-choked megacity, or a Gulf state flaring gas into a desert sky. We rarely picture ourselves. But measured by the only number that treats every human equally — emissions per person — Australia keeps surprisingly heavy company. The story below is not only about how much carbon we release. It is about the strange gap between the country we could be, blessed with more sunlight than almost anywhere on the planet, and the country our energy system still is.
Three decades on, we’ve barely moved
Australia’s emissions per person have drifted down only gently since 1990 — and still sit at roughly three times the world average. As you reach it, the three lines draw themselves across the decades; hover any point for its value, or drag the slider to revisit a year.
c1$entity <- factor(c1$entity, levels = c("Australia","High-income countries","World"))
pal1 <- c("Australia"=conv_red, "High-income countries"=oi["blue"][[1]], "World"=grey_ctx)
c1_acc <- accumulate_by(dplyr::arrange(c1, entity, year), "year")
fig1 <- plot_ly()
for (e in levels(c1$entity)) {
d <- dplyr::filter(c1_acc, entity == e)
fig1 <- fig1 %>% add_trace(
data = d, x = ~year, y = ~co2_per_capita, frame = ~frame,
type = "scatter", mode = "lines+markers", name = e,
line = list(color = pal1[[e]], width = if (e == "Australia") 3.6 else 2),
marker = list(color = pal1[[e]], size = if (e == "Australia") 5 else 3),
text = ~paste0("<b>", entity, "</b><br>", year, ": ",
sprintf("%.1f", co2_per_capita), " t CO\u2082/person"),
hoverinfo = "text")
}
fig1 %>%
tc_style(ylab = "Tonnes of CO\u2082 per person", xlab = "",
xrange = c(1989, 2025), yrange = c(0, 20)) %>%
anim(ms = 260, prefix = "Through ") %>%
autoplay(ms = 260, trans = 260)The company we keep is the oil and gas club
Wealth alone doesn’t explain it. Plenty of rich democracies — Germany, the UK, Japan — generate similar prosperity on a fraction of the carbon. Watch every country travel from 1990 to 2022: most economies grow richer (sliding right) while trimming emissions (drifting down), but Australia (the red diamond) stays stubbornly high, drifting up among the oil and gas exporters. Bubble size shows population; hover any bubble for detail, or scrub the slider to pause on a year.
pal_cont <- c(Asia="#0072B2", Europe="#E69F00", Africa="#009E73",
Americas="#CC79A7", Oceania="#56B4E9")
c2 <- dplyr::arrange(c2, year, country)
fig2 <- plot_ly() %>%
add_trace(
data = dplyr::filter(c2, highlight == 0),
x = ~gdp_per_capita, y = ~co2_per_capita, frame = ~year,
color = ~continent, colors = pal_cont,
size = ~population, sizes = c(18, 1500),
type = "scatter", mode = "markers",
marker = list(sizemode = "area", opacity = 0.6, line = list(width = 0.4, color = "white")),
text = ~paste0("<b>", country, "</b> (", year, ")<br>GDP/person: $",
comma(round(gdp_per_capita)), "<br>CO\u2082/person: ",
sprintf("%.1f", co2_per_capita), " t<br>Population: ", comma(round(population))),
hoverinfo = "text"
) %>%
add_trace(
data = dplyr::filter(c2, highlight == 1),
x = ~gdp_per_capita, y = ~co2_per_capita, frame = ~year,
type = "scatter", mode = "markers+text", inherit = FALSE,
text = ~country, textposition = "top center",
textfont = list(color = conv_red, size = 12.5, family = "Libre Franklin"),
marker = list(size = 16, color = conv_red, symbol = "diamond",
line = list(width = 1.3, color = "white")),
hovertext = ~paste0("<b>Australia</b> (", year, ")<br>GDP/person: $",
comma(round(gdp_per_capita)), "<br>CO\u2082/person: ",
sprintf("%.1f", co2_per_capita), " t"),
hoverinfo = "text", showlegend = FALSE
) %>%
tc_style(ylab = "CO\u2082 per person (tonnes)",
xlab = "GDP per person (international $, log scale)",
xtype = "log", xrange = c(2.5, 5.0), yrange = c(0, 38)) %>%
anim(ms = 450, prefix = "") %>%
autoplay(ms = 450, trans = 300)
fig2Why? Because coal still keeps the lights on
The engine of our emissions is electricity. For most of this century, coal did the heavy lifting. Watch the bright bands grow from 2000 onward: rooftop and large-scale solar climbs from almost nothing to over 50 terawatt-hours, with wind close behind. Toggle any source off in the legend; hover for yearly values.
src_levels <- c("Coal","Gas","Oil","Bioenergy","Hydro","Wind","Solar")
src_pal <- c(Coal="#2f2f2f", Gas="#7a6a55", Oil="#b0a99f",
Bioenergy="#74a892", Hydro="#2c7fb8", Wind="#41b6c4", Solar="#f4a300")
c3$source <- factor(c3$source, levels = src_levels)
c3_acc <- accumulate_by(dplyr::arrange(c3, source, year), "year")
fig3 <- plot_ly()
for (s in src_levels) {
d <- dplyr::filter(c3_acc, source == s)
fig3 <- fig3 %>% add_trace(
data = d, x = ~year, y = ~twh, frame = ~frame,
type = "scatter", mode = "lines", stackgroup = "one", name = s,
fillcolor = src_pal[[s]], line = list(width = 0.4, color = "white"),
text = ~paste0("<b>", source, "</b><br>", year, ": ", sprintf("%.1f", twh), " TWh"),
hoverinfo = "text")
}
fig3 %>%
tc_style(ylab = "Electricity generated (TWh)", xlab = "",
xrange = c(1999.5, 2024.5), yrange = c(0, 295)) %>%
anim(ms = 300, prefix = "Through ", trans = 0) %>%
autoplay(ms = 300, trans = 0)We started last in the race — and we’re sprinting to catch up
Compared with peer nations, Australia spent the 2000s near the back of the pack on clean electricity. Then something changed. Watch the lines race from 2000 to 2024: Australia (bold red) climbs faster than almost anyone, even as Britain, Germany and Canada stay ahead. Hover to read any country’s share in a given year.
pal4 <- c("Australia"=conv_red, "United Kingdom"=oi["blue"][[1]],
"Germany"=oi["orange"][[1]], "Canada"=oi["green"][[1]],
"United States"=oi["sky"][[1]], "Japan"=oi["pink"][[1]])
c4$entity <- factor(c4$entity, levels = names(pal4))
c4_acc <- accumulate_by(dplyr::arrange(c4, entity, year), "year")
fig4 <- plot_ly()
for (e in names(pal4)) {
d <- dplyr::filter(c4_acc, entity == e)
fig4 <- fig4 %>% add_trace(
data = d, x = ~year, y = ~renewables_share, frame = ~frame,
type = "scatter", mode = "lines+markers", name = e,
line = list(color = pal4[[e]], width = if (e == "Australia") 3.6 else 2),
marker = list(color = pal4[[e]], size = if (e == "Australia") 5 else 3),
text = ~paste0("<b>", entity, "</b><br>", year, ": ",
sprintf("%.1f", renewables_share), "% renewable"),
hoverinfo = "text")
}
fig4 %>%
tc_style(ylab = "Renewable share of electricity", xlab = "",
xrange = c(1999.5, 2024.5), yrange = c(0, 70), ysuffix = "%") %>%
anim(ms = 300, prefix = "Through ") %>%
autoplay(ms = 300, trans = 300)On the world map, we’re a dark-red outlier
Step back to the whole planet. Shade every country by emissions per person and a pattern appears: a deep-red cluster across the Gulf, North America — and the bottom-right corner of the map, where Australia sits alone in the Southern Hemisphere. Watch the world map shift from 1990 to 2024; hover any country to read its value, or drag the slider to a particular year.
c5 <- dplyr::arrange(c5, year, country)
g <- list(showframe = FALSE, showcoastlines = FALSE,
projection = list(type = "natural earth"),
bgcolor = "white", landcolor = "#f2f2f2")
plot_ly(c5, type = "choropleth",
locations = ~iso_code, z = ~co2_per_capita, frame = ~year,
locationmode = "ISO-3",
colorscale = list(c(0,"#fff5f0"), c(0.25,"#fcae91"),
c(0.5,"#fb6a4a"), c(0.75,"#de2d26"), c(1,"#a50f15")),
zmin = 0, zmax = 25,
marker = list(line = list(color = "white", width = 0.3)),
colorbar = list(title = list(text = "t CO\u2082\nper person", font=list(size=11)),
thickness = 12, len = 0.7),
text = ~paste0("<b>", country, "</b> (", year, ")<br>",
sprintf("%.1f", co2_per_capita), " t CO\u2082/person"),
hoverinfo = "text") %>%
layout(geo = g, margin = list(l = 0, r = 0, t = 6, b = 10),
font = list(family = "Libre Franklin, Arial, sans-serif")) %>%
anim(ms = 900, prefix = "Year ", redraw = TRUE, trans = 0) %>%
config(displayModeBar = FALSE, responsive = TRUE) %>%
autoplay(ms = 900, trans = 0, redraw = TRUE)So, are we still the lucky country?
The luck was always in the geology and the geography: cheap coal under the ground, and more sunlight falling on our roofs than almost any nation could dream of. For decades we cashed in the first and ignored the second. The charts above show a country that is, all at once, one of the planet’s heaviest per-person emitters and one of its fastest adopters of solar power.
That tension is the story worth telling. Australia is not standing still — Chart 4 shows a genuine sprint. But Chart 1 shows the sprint hasn’t yet bent the line that matters, because Chart 3 shows coal still anchoring the grid. The question for the next decade isn’t whether the sun has arrived. It’s whether we let it finish the job.
Data & methods
All five visualisations were created in R using the
plotly and tidyverse packages, and published
as a single self-contained HTML document. Each chart is animated over
time — the trend lines and electricity mix draw themselves year
by year, the wealth–emissions bubbles travel from 1990 to 2022, and the
world map redraws at five-year steps — and plays automatically as each
chart scrolls into view, with a slider to revisit any year and the usual
hover, zoom and legend toggling. Data were sourced from Our World in
Data, which compiles figures from the Global Carbon Project,
the Energy Institute Statistical Review of World Energy,
Ember and the Maddison Project. “CO₂ per person” refers to
production-based (territorial) emissions. The wealth–emissions scatter
(Chart 2) runs to 2022, the most recent year with complete GDP data; all
other charts run to the latest available year (2024). Bubbles in Chart 2
are limited to nations above one million people that report data across
the full period. Colour palettes are colour-blind-safe (Okabe–Ito) with
The Conversation’s brand red reserved for Australia; every chart pairs
colour with a text label, legend and hover values so meaning never
depends on colour alone. The full reference list (APA 7th edition) and a
generative-AI acknowledgement appear below, and are repeated in the
accompanying Cadmus submission.
Acknowledgements
This visualisation uses open data published by Our World in Data, which compiles and harmonises figures from the Global Carbon Project (territorial CO₂ emissions), the Energy Institute Statistical Review of World Energy and Ember (electricity by source), and the Maddison Project Database (GDP per capita). Country-to-continent mapping used Luke Duncalfe’s open ISO‑3166 dataset. I gratefully acknowledge these organisations, whose open licensing made this work possible.Generative AI. This project is my own work: I chose the topic and story angle, selected and sourced the open datasets, set the analytical approach, made the design and editorial decisions, and verified every figure against the original data. I used Claude (Anthropic, 2026), a generative-AI large language model, as a support tool to help refine and implement parts of the work — assisting with the R code, the construction of the visualisations, the wording of the explanatory text, and generating the cinematic banner graphic (Figure 0). No data were generated, simulated or fabricated by AI; I independently reviewed, ran and verified each chart and statistic, and I take full responsibility for the content. In line with RMIT’s Artificial intelligence (AI): acknowledgement and referencing guidelines, I have retained a record of the prompts used and outputs generated.
References — APA 7th edition
Andrew, R. M., & Peters, G. P. (2025). The Global Carbon
Project’s fossil CO₂ emissions dataset (2025v15) [Data set]. Zenodo.
https://doi.org/10.5281/zenodo.17417124
Anthropic. (2026). Claude (Opus 4) [Large language model]. https://claude.ai
Bolt,
J., & van Zanden, J. L. (2024). Maddison Project Database
2023 [Data set]. Groningen Growth and Development Centre. https://www.rug.nl/ggdc/historicaldevelopment/maddison/
Duncalfe, L. (2024). ISO 3166 country and continent codes [Data
set]. GitHub. https://github.com/lukes/ISO-3166-Countries-with-Regional-Codes
Ember. (2025). Yearly electricity data [Data set]. Retrieved from
Our World in Data. https://ourworldindata.org/electricity-mix
Energy Institute. (2025). Statistical review of world energy 2025
[Data set]. Retrieved from Our World in Data. https://ourworldindata.org/energy
R Core Team.
(2025). R: A language and environment for statistical computing
[Computer software]. R Foundation for Statistical Computing. https://www.R-project.org/
Ritchie, H., Rosado,
P., & Roser, M. (2023). CO₂ and greenhouse gas emissions. Our
World in Data. https://ourworldindata.org/co2-and-greenhouse-gas-emissions
Sievert, C. (2020). Interactive web-based data visualization with R,
plotly, and shiny. Chapman and Hall/CRC. https://plotly-r.com
Wickham, H., Averick, M., Bryan, J., Chang, W., McGowan, L. D.,
François, R., … Yutani, H. (2019). Welcome to the tidyverse. Journal
of Open Source Software, 4(43), 1686. https://doi.org/10.21105/joss.01686