Examining the intersection of historical responsibility, policy milestones, and present-day climate justice.
The Trajectory of Global Emissions and Policy
How effective has international climate governance been? Plot D1 overlays global CO₂ emissions with major international climate milestones, from the 1972 Stockholm Conference through the 2015 Paris Agreement.
Global CO₂ Emissions Trend with Key Policy Milestones
A striking paradox emerges: global emissions have continued rising almost continuously despite decades of international climate agreements. While policies have undoubtedly prevented worse trajectories, economic growth—particularly the rapid, post-2000 industrialization in Asia—has historically outpaced mitigation efforts. The only visible downward spikes represent major global macroeconomic shocks (e.g., world wars, financial crises, and COVID-19), but these are inevitably followed by rapid rebounds.
Attributing Temperature Rise
A direct way to assess historical responsibility is to model how a nation’s cumulative emissions translate into observed global warming. Plot D2 visualizes the estimated temperature contribution (in °C) generated by individual countries.
Country Contributions to Global Temperature Rise
View Code
df_temp = country_df[country_df["year"] ==2024][ ["country","temperature_change_from_co2","temperature_change_from_ghg","share_of_temperature_change_from_ghg"]].dropna().nlargest(15, "temperature_change_from_ghg").reset_index(drop=True)fig, axes = plt.subplots(1, 3, figsize=(18, 7))fig.suptitle("Plot D2 — Country Contributions to Global Temperature Rise (2024)\nCumulative attribution of observed warming", fontsize=14, fontweight="bold")cmap_t = plt.cm.get_cmap("hot_r", len(df_temp))for ax, col, title inzip(axes, ["temperature_change_from_co2","temperature_change_from_ghg","share_of_temperature_change_from_ghg"], ["From CO₂ alone (°C)","From All GHGs (°C)","Share of Global Warming (%)"]): colours_t = [COUNTRY_COLORS.get(c, cmap_t(i/len(df_temp))) for i, c inenumerate(df_temp["country"])] bars = ax.barh(df_temp["country"][::-1], df_temp[col][::-1], color=colours_t[::-1], alpha=0.85, edgecolor="white")for bar, val inzip(bars, df_temp[col][::-1]): ax.text(val +max(df_temp[col])*0.01, bar.get_y() + bar.get_height()/2,f"{val:.3f}"if"share"notin col elsef"{val:.1f}%", va="center", fontsize=8) ax.set_title(title, fontsize=11, fontweight="bold") ax.spines["top"].set_visible(False); ax.spines["right"].set_visible(False)plt.tight_layout()plt.savefig(OUT /"D2_temperature_change_attribution.png")plt.close()
The United States is the single largest driver of anthropogenic warming, responsible for approximately 17–18% of the global temperature rise, owing to over a century of sustained, high-volume carbon output.
China ranks second. While its massive industrial expansion is a relatively recent phenomenon, the staggering absolute volume of emissions in the 21st century has rapidly increased its warming contribution.
Europe’s Legacy: The UK and Germany rank highly despite diminishing present-day emissions. Their contributions represent the atmospheric “debt” of being the earliest industrializers.
The Scope of Greenhouse Gases
While CO₂ captures the majority of public attention, greenhouse gas (GHG) accounting is incomplete without methane (CH₄) and nitrous oxide (N₂O).
When viewed in CO₂-equivalent terms, a more nuanced structure of national footprints emerges. While CO₂ dominates fossil-fuel-centric economies, nations with vast agricultural footprints or active land-clearing (such as Brazil and Indonesia) exhibit massive methane footprints. Comprehensive climate mitigation is impossible without addressing these shorter-lived but highly potent gases.
The Geography of Historical vs. Current Responsibility
The central tension in climate justice lies in the difference between who caused the problem historically and who is emitting most today.
Plot D4 highlights the shifting temporal dynamics of global emissions shares. For most of the 20th century, the US and Europe dominated global output. However, by the early 2000s, China rapidly overtook the US in annual shares. The geographic center of global emissions has irrevocably shifted from Western industrial economies to emerging Asian economies.
We visualize this tension between past and present in Plot D5, setting historical cumulative emissions against current per-capita emissions.
Historical Responsibility vs Current Per-Capita Emissions
High-Income Emitters (US, Australia, Saudi Arabia): Sit in the upper-right quadrant, holding both massive historical responsibility and maintaining high present-day per-capita lifestyle emissions.
China: Holds high historical responsibility (due to massive recent output) but maintains moderate per-capita emissions.
India: Despite its massive population and rising annual totals, India remains firmly anchored low on the vertical axis, symbolizing extremely low per-capita footprints.
Plot D6 reinforces this inequality via a choropleth map of current per-capita emissions:
Global Map of CO₂ Emissions per Capita
View Code
df_d6 = country_df.dropna(subset=["co2_per_capita"])df_d6 = df_d6[df_d6["co2_per_capita"] >0]yr_d6 = df_d6["year"].max()d6 = df_d6[df_d6["year"] == yr_d6][["country","iso_code","co2_per_capita"]].copy()HAS_PLOTLY =Falsetry:import plotly.express as px HAS_PLOTLY =TrueexceptImportError:passif HAS_PLOTLY: fig_d6 = px.choropleth( d6, locations="iso_code", color="co2_per_capita", hover_name="country", color_continuous_scale="YlOrRd", range_color=(0, d6["co2_per_capita"].quantile(0.95)), labels={"co2_per_capita": "CO₂ per Capita (t)"}, title=f"Plot D6 — CO₂ per Capita by Country ({yr_d6})", ) fig_d6.update_layout(margin=dict(l=0, r=0, t=50, b=0), height=520, coloraxis_colorbar=dict(title="Tonnes CO₂\nper capita")) fig_d6.write_image(str(OUT /"D6_choropleth_co2_per_capita.png"), width=1400, height=700, scale=2)# fig_d6.show()else: top30 = d6.nlargest(30, "co2_per_capita").reset_index(drop=True) cmap6 = plt.cm.get_cmap("YlOrRd", 30) fig, ax = plt.subplots(figsize=(13, 9)) ax.barh(top30["country"][::-1], top30["co2_per_capita"][::-1], color=[cmap6(i/30) for i inrange(len(top30))][::-1], edgecolor="white", linewidth=0.4) sm = plt.cm.ScalarMappable(cmap="YlOrRd", norm=plt.Normalize(0, top30["co2_per_capita"].max())) sm.set_array([]) cbar = fig.colorbar(sm, ax=ax, fraction=0.02, pad=0.02) cbar.set_label("CO₂ per Capita (tonnes)") ax.set_xlabel("CO₂ per Capita (tonnes)") ax.set_title(f"Plot D6 — Top 30 Countries by CO₂ per Capita ({yr_d6})\n(Install plotly for interactive world map)") ax.spines["left"].set_visible(False); ax.tick_params(left=False) plt.tight_layout() plt.savefig(OUT /"D6_co2_per_capita_ranked.png") plt.close()
The map paints a stark reality: individual citizens in the wealthiest nations and resource-rich Gulf states generate dramatically more carbon annually than the average citizen in Sub-Saharan Africa or South Asia.
Synthesis
Climate negotiations frequently stall on the dual dimensions of responsibility. Developed nations argue that mitigation must include modern behemoths like China and India, as their current trajectories dictate the future climate. Developing nations accurately counter that the West filled the atmospheric carbon budget first to build their wealthy economies, making strict, uniform present-day restrictions fundamentally inequitable. Historical responsibility is formally tested in H4, with Spearman ρ=0.853, p=6.2e-62.