Group project: the Climate System¶
Linda Resch, Caroline Siraki and Hanna Seeberger
# Import the tools we are going to need today:
import matplotlib.pyplot as plt # plotting library
import numpy as np # numerical library
import xarray as xr # netCDF library
import pandas as pd # tabular library
import cartopy # Map projections libary
import cartopy.crs as ccrs # Projections list
# Some defaults:
plt.rcParams['figure.figsize'] = (12, 5) # Default plot size
Part 1 - temperature climatology¶
Open the ERA5 temperature data:
ds = xr.open_dataset('ERA5_LowRes_Monthly_t2m.nc')
Plot three global maps:
- Compute and plot the temporal mean temperature ¯T for the entire period (unit °C)
# Compute the temporal mean temperature
t2m = ds['t2m']
t2m_c = t2m - 273.15 # Convert to Celsius
T_mean = t2m_c.mean(dim='time')
# Plot the global mean temperature
fig = plt.figure(figsize=(12, 5))
ax = plt.axes(projection=ccrs.Robinson())
T_mean.plot(ax=ax, transform=ccrs.PlateCarree(), cbar_kwargs={'label': 'Mean Temperature (°C)'})
ax.coastlines()
ax.gridlines()
plt.title('Temporal Mean Temperature (°C)')
plt.show()
- Compute and plot ¯T∗ (see lesson), the zonal anomaly map of average temperature.
# Compute the zonal mean temperature
T_zonal_mean = T_mean.mean(dim='longitude')
# Expand the dimensions to subtract from the global mean
T_zonal_anomaly = T_mean - T_zonal_mean
# Plot the zonal anomaly
fig = plt.figure(figsize=(12, 5))
ax = plt.axes(projection=ccrs.Robinson())
T_zonal_anomaly.plot.imshow(ax=ax, transform=ccrs.PlateCarree(), cbar_kwargs={'label': 'Zonal Anomaly (°C)'})
ax.coastlines(); ax.gridlines();
plt.title('Zonal Temperature Anomaly (°C)')
plt.show()
- Compute and plot the monthly average temperature for each month ¯TM (annual cycle). We expect a variable of dimensions (month: 12, latitude: 241, longitude: 480). Hint: remember the
.groupby()
command we learned in the lesson. Now plot the average monthly temperature range map, i.e. max(¯TM) - min(¯TM) (maximum and minimum over the month dimension).
# Compute the monthly climatology (average temperature for each month)
T_monthly_mean = t2m_c.groupby('time.month').mean()
# Plot the monthly average temperature maps
fig, axes = plt.subplots(3, 4, subplot_kw={'projection': ccrs.Robinson()}, figsize=(15, 10))
# Loop over the 12 months and plot each month's mean temperature
for i, ax in enumerate(axes.flat):
# Select the temperature for month i+1
month_data = T_monthly_mean.isel(month=i)
# Plot the 2D data
im = month_data.plot.pcolormesh(
ax=ax,
transform=ccrs.PlateCarree(),
cmap='coolwarm',
add_colorbar=False
)
ax.coastlines()
ax.set_title(f'Month {i+1}')
# Add a single vertical colorbar on the right-hand side
cbar_ax = fig.add_axes([0.92, 0.15, 0.02, 0.7]) # [left, bottom, width, height]
fig.colorbar(im, cax=cbar_ax, orientation='vertical', label='Temperature (°C)')
# Adjust spacing between subplots
plt.subplots_adjust(hspace=0.3, wspace=0.05, top=0.9, bottom=0.1, right=0.9)
# Add a title and show the figure
plt.suptitle('Monthly Average Temperature (°C)', fontsize=16)
plt.show()
Questions:
1. Look at the zonal temperature anomaly map.
Explain why northern Europe and the North Atlantic region is significantly warmer than the same latitudes in North America or Russia.
Northern Europe and the North Atlantic are significantly warmer due to the North Atlantic Drift, an extension of the Gulf Stream. This ocean current carries warm water from the tropics towards Europe, moderating the climate. In contrast, North America and Russia experience colder continental climates due to their distance from large water bodies, which provide thermal moderation.
Explain why the Northern Pacific Ocean does not have a similar pattern.
The Northern Pacific does not have a strong equivalent to the Gulf Stream. The currents in the Pacific are less intense, and the Pacific Ocean's larger size leads to more thermal inertia, which prevents localized warming similar to the Atlantic.
2. Look at the average monthly temperature range map.
Explain why the temperature range is smaller in the tropics than at higher latitudes
The tropics receive nearly constant solar radiation year-round due to their position near the equator, resulting in minimal seasonal temperature variation. At higher latitudes, solar radiation varies significantly with the seasons, leading to large temperature ranges.
Explain why the temperature range is smaller over oceans than over land.
Oceans have a higher heat capacity than land, meaning water heats up and cools down more slowly. This moderates temperature variations over oceans. Land surfaces, especially those with low moisture, heat up and cool down rapidly, leading to larger temperature ranges.
Where is the temperature range largest? Explain why.
The largest temperature ranges occur over continental interiors at high latitudes, such as Siberia, Canada, and parts of Central Asia. This is because these regions experience extreme seasonal variations in solar radiation, a lack of nearby oceans to moderate the temperatures (continentality), snow and ice cover during winter, which amplify cooling effects.
Part 2 - Precipitation climatology¶
Open the precipitation file and explore it. The units of monthly precipitation are wrongly labeled (unfortunately). They should read: m per day.
ds = xr.open_dataset('ERA5_LowRes_Monthly_tp.nc')
tp = ds['tp']
# Convert units from meters per day to millimeters per day
tp_mm = tp * 1000 # 1 m = 1000 mm
Using .groupby()
, compute the average daily precipitation for each month of the year (We expect a variable of dimensions (month: 12, latitude: 241, longitude: 480)). Convert the units to mm per day. Plot a map of average daily precipitation in January and in August with the levels [0.5, 1, 2, 3, 4, 5, 7, 10, 15, 20, 40]
and the colormap `YlGnBu'
# Compute the monthly climatology (average precipitation for each month)
precip_monthly_mean = tp_mm.groupby('time.month').mean()
# Define the color levels and colormap
levels = [0.5, 1, 2, 3, 4, 5, 7, 10, 15, 20, 40]
cmap = 'YlGnBu'
# Create a figure with two subplots (January and August)
fig, axes = plt.subplots(1, 2, subplot_kw={'projection': ccrs.Robinson()}, figsize=(14, 6))
# January precipitation map
ax = axes[0]
january_precip = precip_monthly_mean.sel(month=1)
im1 = january_precip.plot.contourf(
ax=ax,
transform=ccrs.PlateCarree(),
levels=levels,
cmap=cmap,
cbar_kwargs={'shrink': 0.6, 'label': 'Precipitation (mm/day)'}
)
ax.coastlines()
ax.set_title('Average Daily Precipitation - January')
# August precipitation map
ax = axes[1]
august_precip = precip_monthly_mean.sel(month=8)
im2 = august_precip.plot.contourf(
ax=ax,
transform=ccrs.PlateCarree(),
levels=levels,
cmap=cmap,
cbar_kwargs={'shrink': 0.6, 'label': 'Precipitation (mm/day)'}
)
ax.coastlines()
ax.set_title('Average Daily Precipitation - August')
# Add a title for the whole figure
plt.suptitle('Monthly Average Daily Precipitation (mm/day)', fontsize=16)
# Adjust spacing
plt.tight_layout()
plt.show()
Questions:
1. Describe the location of the ITCZ in January and August. Without going into the details, explain (in one or two sentences)
- In January, the Intertropical Convergence Zone (ITCZ) is located south of the equator, over the southern hemisphere, particularly over northern parts of South America, southern Africa, and northern Australia.
- In August, the ITCZ shifts north of the equator, moving over regions like West Africa, India, and Southeast Asia, driven by the seasonal heating of the land in the northern hemisphere.
2. Describe the precipitation seasonality in West Africa and in India. Name the phenomenon at play.
- West Africa: Precipitation peaks during the summer months (June–September) when the ITCZ shifts north, bringing monsoonal rains. This phenomenon is part of the West African Monsoon system.
- India: Precipitation seasonality is dominated by the Indian Summer Monsoon, where heavy rains occur from June to September due to the seasonal reversal of winds (southwesterly flow) that transport moisture from the Indian Ocean onto the Indian subcontinent.
- The ITCZ migration and the associated monsoon systems (West African Monsoon and Indian Summer Monsoon) are driven by seasonal changes in solar heating, which cause shifts in atmospheric circulation and the convergence of moist air.
Part 3: sea-level pressure and surface winds¶
Open the file containing the surface winds (u10
and v10
) and sea-level pressure (msl
).
ds = xr.open_dataset('ERA5_LowRes_Monthly_uvslp.nc')
Compute [¯SLP] (the temporal and zonal average of sea-level pressure). Convert it to hPa, and plot it (line plot). With the help of plt.axhline, add the standard atmosphere pressure line to the plot to emphasize high and low pressure regions. Repeat with [¯u10] and [¯v10] (in m s−1) and add the 0 horizontal line to the plot (to detect surface westerlies from easterlies for example).
# Extract variables
msl = ds['msl'] # Sea-level pressure (Pa)
u10 = ds['u10'] # Zonal wind component (m/s)
v10 = ds['v10'] # Meridional wind component (m/s)
# 1. Compute the temporal and zonal mean of sea-level pressure
msl_hpa = msl.mean(dim='time') / 100.0 # Convert from Pa to hPa
msl_zonal_mean = msl_hpa.mean(dim='longitude') # Zonal average
# 2. Compute the temporal and zonal mean of u10 and v10
u10_zonal_mean = u10.mean(dim='time').mean(dim='longitude') # Zonal average of u10
v10_zonal_mean = v10.mean(dim='time').mean(dim='longitude') # Zonal average of v10
# Define latitudes for the x-axis
latitudes = ds['latitude']
# Plotting
fig, axes = plt.subplots(3, 1, figsize=(10, 12), sharex=True)
# Plot sea-level pressure
axes[0].plot(latitudes, msl_zonal_mean, color='b', label='Zonal Mean SLP')
axes[0].axhline(1013.25, color='r', linestyle='--', label='Standard Atmospheric Pressure (1013.25 hPa)')
axes[0].set_title('Zonal and Temporal Mean of Sea-Level Pressure')
axes[0].set_ylabel('Pressure (hPa)')
axes[0].legend()
axes[0].grid()
# Plot u10 (zonal wind component)
axes[1].plot(latitudes, u10_zonal_mean, color='g', label='Zonal Mean u10')
axes[1].axhline(0, color='k', linestyle='--', label='Zero Line')
axes[1].set_title('Zonal and Temporal Mean of Zonal Wind (u10)')
axes[1].set_ylabel('Wind Speed (m/s)')
axes[1].legend()
axes[1].grid()
# Plot v10 (meridional wind component)
axes[2].plot(latitudes, v10_zonal_mean, color='m', label='Zonal Mean v10')
axes[2].axhline(0, color='k', linestyle='--', label='Zero Line')
axes[2].set_title('Zonal and Temporal Mean of Meridional Wind (v10)')
axes[2].set_ylabel('Wind Speed (m/s)')
axes[2].set_xlabel('Latitude')
axes[2].legend()
axes[2].grid()
# Adjust layout
plt.tight_layout()
plt.show()
Questions:
1. Based on your knowledge about the general circulation of the atmosphere, explain the latitude location of the climatological high and low pressure systems of Earth.
The Earth's general circulation of the atmosphere is responsible for the distinct latitudinal bands of high and low pressure:
Equatorial Low (Near 0° latitude): The Intertropical Convergence Zone (ITCZ) lies near the equator, where intense solar heating causes air to rise. This creates a low-pressure zone due to the upward movement of air and its divergence aloft. Rising warm air leads to significant cloud formation and precipitation, characteristic of the tropical rain belts.
Subtropical Highs (Around 30°N and 30°S): At around 30° latitude, descending air from the Hadley Cells causes regions of high pressure. This zone is known as the subtropical ridge and is associated with arid climates (e.g., the Sahara Desert, deserts of Australia) because the sinking air suppresses cloud formation.
Subpolar Lows (Around 60°N and 60°S): Near 60° latitude, the cold polar air meets warmer mid-latitude air, creating the polar front. The warm air rises over the denser cold air, leading to low-pressure zones. This region is characterized by storm systems and significant precipitation, particularly in the polar front jet stream region.
Polar Highs (Near 90°N and 90°S): At the poles, cold, dense air sinks, creating high-pressure zones. These regions are dry and stable due to the lack of vertical air motion and limited moisture.
2. Similarly, explain the direction and strength of the zonal and meridional winds on earth (tip: the sea-level pressure plot helps)
The direction and strength of winds are determined by the pressure gradient force, Coriolis effect, and friction. The sea-level pressure plot helps illustrate these dynamics:
Zonal Winds (u10: East-West Component)
Easterlies (Trade Winds) at 0°–30°N/S: Air moves from the subtropical highs (30°) to the equatorial low (0°). The Coriolis effect deflects winds to the west, creating northeasterly trades in the Northern Hemisphere and southeasterly trades in the Southern Hemisphere. These winds are strong due to the consistent pressure gradient toward the equator.
Westerlies at 30°–60°N/S: Air moves poleward from the subtropical highs toward the subpolar lows (60°). The Coriolis effect deflects winds to the east, creating the mid-latitude westerlies. These winds are particularly strong due to the steep pressure gradient and the formation of the polar front jet stream.
Polar Easterlies at 60°–90°N/S: Cold air flows from the polar highs toward the subpolar lows. The Coriolis effect deflects these winds to the west, producing polar easterlies.
Meridional Winds (v10: North-South Component)
Weak Poleward Flow at 30°N/S: Sinking air at the subtropical highs tends to flow poleward toward the subpolar lows. This is generally weak at the surface but contributes to the westerlies at higher latitudes.
Equatorward Flow Near the Poles: Cold, dense air sinks at the polar highs and flows equatorward toward the subpolar lows.
Part 4: temperature change and CO2 concentrations¶
Download the global average CO2 concentration timeseries data in the CSV format (source: NOAA). Let us help you read them using pandas:
df = pd.read_csv('co2_mm_gl.csv', skiprows=38)
# Combine the first two columns into a datetime column and set as index
df['date'] = pd.to_datetime(df.iloc[:, 0].astype(str) + '-' + df.iloc[:, 1].astype(str), format='%Y-%m')
df.set_index('date', inplace=True)
Prepare three plots:
- plot the monthly global CO2 concentration as a function of time.
- plot the annual average timeseries of global CO2 concentration as a function of time.
- plot the annual average timeseries of global CO2 concentration and of global 2m temperature from ERA5 on the same plot (using a secondary y axis for temperature).
# Step 2: Compute Annual Mean CO2 Concentration
df['year'] = df.index.year
annual_co2 = df.groupby('year')['average'].mean()
# Step 3: Load ERA5 Temperature Data (Global Average)
# Ensure you have the global ERA5 temperature data file
ds_temp = xr.open_dataset('ERA5_LowRes_Monthly_t2m.nc')
t2m = ds_temp['t2m']
t2m_c = t2m - 273.15 # Convert temperature to Celsius
# Compute the global average 2m temperature (weighted by latitude) over time
weights = np.cos(np.deg2rad(t2m.latitude)) # Latitude weights
t2m_global_avg = t2m_c.weighted(weights).mean(dim=('latitude', 'longitude'))
# Convert to pandas DataFrame and compute annual means
t2m_df = t2m_global_avg.to_dataframe(name='temperature').reset_index()
t2m_df['year'] = t2m_df['time'].dt.year
annual_temp = t2m_df.groupby('year')['temperature'].mean()
# Step 4: Plot the Three Plots
fig, axes = plt.subplots(3, 1, figsize=(12, 12))
# Plot 1: Monthly Global CO2 Concentration
axes[0].plot(df.index, df['average'], color='green', label='Monthly CO2')
axes[0].set_title('Monthly Global CO₂ Concentration')
axes[0].set_ylabel('CO₂ (ppm)')
axes[0].legend()
# Plot 2: Annual Average CO2 Concentration
axes[1].plot(annual_co2.index, annual_co2.values, color='blue', label='Annual Avg CO2')
axes[1].set_title('Annual Average Global CO₂ Concentration')
axes[1].set_ylabel('CO₂ (ppm)')
axes[1].legend()
# Plot 3: CO2 and Temperature on the Same Plot
ax1 = axes[2]
ax2 = ax1.twinx() # Secondary y-axis for temperature
ax1.plot(annual_co2.index, annual_co2.values, color='purple', label='CO₂ (ppm)')
ax2.plot(annual_temp.index, annual_temp.values, color='red', label='Temperature (°C)')
ax1.set_title('Annual CO₂ Concentration and Global 2m Temperature')
ax1.set_xlabel('Year')
ax1.set_ylabel('CO₂ (ppm)', color='purple')
ax2.set_ylabel('Temperature (°C)', color='red')
ax1.legend(loc='upper left')
ax2.legend(loc='upper right')
# Final Adjustments
plt.tight_layout()
plt.show()
Questions:
1. Describe and explain the annual cycle of CO2 concentrations.
The annual cycle of CO₂ concentrations shows a seasonal variation superimposed on the long-term upward trend. This pattern is primarily driven by the seasonal vegetation dynamics in the Northern Hemisphere:
- Spring/Summer (April–September): CO₂ concentrations decrease as plants take up CO₂ for photosynthesis during their growing season.
- Fall/Winter (October–March): CO₂ concentrations increase as plants shed their leaves, stop photosynthesis, and organic matter decays, releasing CO₂ back into the atmosphere.
The Northern Hemisphere dominates this pattern due to its larger landmass and forest cover compared to the Southern Hemisphere.
2. What was the CO2 concentration in the atmosphere in the pre-industrial era? Compute the annual increase in CO2 concentration (unit: ppm per year) between 1980 and 1985 and between 2016 and 2021.
The atmospheric CO₂ concentration during the pre-industrial era (circa 1750) was approximately 280 ppm.
For 1980–1985:
- Average CO₂ concentration in 1980: ~339.7 ppm
- Average CO₂ concentration in 1985: ~346.1 ppm
For 2016-2021
- Average CO₂ concentration in 1980: ~404.2 ppm
- Average CO₂ concentration in 1985: ~416.5 ppm
The annual increase is given by:
CO2_1980 = 339.7 # ppm
CO2_1985 = 346.1 # ppm
delta_t = 5 # years
annual_increase = (CO2_1985 - CO2_1980) / delta_t
print(f"The annual increase in CO₂ concentration between 1980 and 1985 is {annual_increase:.2f} ppm/year.")
The annual increase in CO₂ concentration between 1980 and 1985 is 1.28 ppm/year.
CO2_2016 = 404.2 # ppm
CO2_2021 = 416.5 # ppm
delta_t = 5 # years
annual_increase = (CO2_2021 - CO2_2016) / delta_t
print(f"The annual increase in CO₂ concentration between 2016 and 2021 is {annual_increase:.2f} ppm/year.")
The annual increase in CO₂ concentration between 2016 and 2021 is 2.46 ppm/year.
3. Describe the relationship between global temperatures and CO2 concentrations. Beside CO2, name three processes that can influence temperature variability and change at the global scale.
There is a strong positive correlation between rising CO₂ concentrations and global temperatures. As CO₂ is a greenhouse gas, it traps outgoing longwave radiation from Earth's surface, leading to an enhanced greenhouse effect. This causes global temperatures to increase.
The relationship is evident in the parallel upward trends of CO₂ and temperature since the industrial revolution.
Besides CO₂, the following processes can influence temperature variability and change at the global scale:
Solar Variability: Changes in solar radiation due to the 11-year solar cycle or longer-term solar variations influence Earth's energy balance and temperature.
Volcanic Activity: Large volcanic eruptions release aerosols (e.g., sulfur dioxide) into the stratosphere, which reflect incoming solar radiation, causing temporary global cooling.
Oceanic Variability (e.g., ENSO): Natural climate patterns such as the El Niño-Southern Oscillation (ENSO) affect sea surface temperatures and global weather patterns:
- El Niño leads to global warming (due to heat release from the Pacific Ocean).
- La Niña causes global cooling.
Part 5: Climate Risk Dashboard (open research question)¶
We will use the Climate Risk Dashboard climate-risk-dashboard.climateanalytics.org from the Horizon 2020 PROVIDE Project to create and analyze an open research question. To learn how to use the dashboard, visit the OGGM-Edu website, which includes examples using mean temperature and glacier volume.
Select Indicators and Geography
- Choose two to three
Indicator
's from the dashboard. Ensure that you pick only oneIndicator
per Sector (e.g., one from Terrestrial Climate and one from Biodiversity). - Select a
GEOGRAPHY
for yourIndicator
's (not all geographies are available for all indicators).- Try to pick related locations. For example, if you choose a city, also consider selecting its country or region for comparison.
- Or, if it fits to your research question, you can also select an additional
GEOGRAPHY
for comparison (e.g. compare two countries), but you do not have to.
- Choose two to three
Formulate a Research Question
- Based on your selected
Indicator
's andGEOGRAPHY
, create a research question.- Please mention this research question clearly in your notebook.
- Your analysis will focus on comparing two to three scenarios available in the dashboard.
- Based on your selected
Conduct the Analysis
- Visualizations:
- Use at least one plot per
Indicator
by downloading plots directly from the dashboard. You can add them to your notebook with drag-and-drop. - Further, include at least two custom plots in your analysis. This means download the raw data from the dashboard and create your own plot. For an example see this section on OGGM-Edu. Please use the original filenames of the downloaded data in your notebook.
- Use at least one plot per
- References:
- Try to find at least one reference (reports, papers or articls) related to your research question and mention them in the notebook by providing a link. A good resource for many climate change related topics is the IPCC report.
- Visualizations:
Answer Guiding Questions to your Research Question
Answer at least three of the questions below, or come up with your own creative questions! You’re encouraged to mix and match the provided questions with your own ideas or explore different angles that interest you.
- How do the scenarios differ over time for each Indicator?
- What are the spatial differences between scenarios for each Indicator?
- If applicable: How much risk is avoided by staying below a certain threshold for your Indicator?
- Are there any correlations between your selected Indicators?
1. Select Indicators and Geography¶
Indicators¶
- Length of the fire season (Terrestial Climate)
Number of days per year where the Fire Weather Index (FWI) exceeds the average of its local maximum and minimum value during the pre-industrial reference period (1850-1900). The FWI is a meteorologically based index used worldwide to estimate fire danger. It consists of different components that account for the effects of temperature, precipitation, relative humidity and wind on fire behaviour and spread. The higher the FWI is, the more favourable the meteorological conditions to trigger a wildfire are.
(https://climate-risk-dashboard.climateanalytics.org/impacts/explore) - Heatwave days per year (Urban Heat Stress)
Number of days among periods of at least 3 consecutive days in which the maximum and minimum temperature exceeds the 90th percentile value of a reference present period (2011-2020).
(https://climate-risk-dashboard.climateanalytics.org/impacts/explore)
Scenarios¶
2020 climate policies
This scenario assumes that no further climate action is taken beyond the climate policies that were in place in 2020. Global warming reaches 2.9°C in 2100 (best estimate), and would continue climbing into the new century.
(https://climate-risk-dashboard.climateanalytics.org/impacts/explore)Shifting pathway
This scenario explores how a broader shift towards sustainable development can be combined with stringent climate policies. Global warming peaks at 1.6°C in 2060 and goes back to 1.3°C in 2100 (best estimate).
(https://climate-risk-dashboard.climateanalytics.org/impacts/explore)
Geography¶
Canada and Toronto¶
This analysis will compare Canada's Length of the Fire Season with Toronto's Heatwave Days per Year to explore the relationship between wildfire duration and extreme heat events. Canada’s fire season data reflects national climate trends, while Toronto’s heatwave data provides insights into localized urban heat stress. By examining these two indicators, the study aims to understand if the increasing length of the fire season in Canada is linked to more frequent extreme heat events in Toronto.
The plot comparing the changes in length of the fire season in Canada under the two scenarios—Shifting Pathway and 2020 Climate Policies shows a stark contrast in future fire risks. Under the 2020 Climate Policies scenario, the length of the fire season increases significantly, especially in southern regions like British Columbia near Vancouver. These areas see a substantial rise in fire season days, indicating that warmer, drier conditions will persist for longer periods, elevating wildfire risks. In contrast, higher-latitude areas, such as the northern parts of Canada, experience only small changes in fire season length.
In the Shifting Pathway scenario, where sustainable development and stringent climate policies are prioritized, the length of the fire season remains much more stable across the country. There is only a slight increase in fire season length in southern regions, suggesting that climate mitigation policies help reduce the risks of prolonged wildfire seasons. This indicates that without further climate action, fire seasons in Canada will become significantly longer, particularly in densely populated southern regions.
The plot displaying heatwave days per year in Toronto under the two scenarios highlights the growing risk of extreme heat events. In the 2020 Climate Policies scenario, the entire region experiences more than 42 heatwave days per year, signaling a drastic rise in extreme heat events. The map shows a consistent and widespread increase in heatwave frequency, with no areas escaping these extreme conditions. Toronto's urban center stands out as a hotspot, indicating that densely populated areas will likely face the most intense heatwaves due to urban heat island effects.
Under the Shifting Pathway scenario, the number of heatwave days is significantly lower. Most areas around Toronto have fewer than 42 heatwave days per year, and the overall risk of extreme heat events is reduced. While Toronto still experiences a "hotspot" of elevated heatwave days, the scenario shows that stringent climate policies can help lower the frequency of extreme heat events and mitigate the associated risks.
# load data files
canada_curpol = pd.read_csv('impact-time_CAN_curpol_terclim-fwils_0.5_present-day.csv')
canada_shiftpath = pd.read_csv('impact-time_CAN_sp_terclim-fwils_0.5_present-day.csv')
toronto_curpol = pd.read_csv('impact-time_toronto_curpol_urbclim-heatwave-days_0.5_absolute.csv')
toronto_shiftpath = pd.read_csv('impact-time_toronto_sp_urbclim-heatwave-days_0.5_absolute.csv')
# ensure the same time periods by interpolating Canada data to match Toronto data
def align_data(canada_data, toronto_data):
# interpolate Canada data to match Toronto years
toronto_years = toronto_data['year']
canada_data = canada_data.set_index('year').reindex(toronto_years).interpolate().reset_index()
return canada_data, toronto_years
# align both scenarios
canada_curpol, years_curpol = align_data(canada_curpol, toronto_curpol)
canada_shiftpath, years_shiftpath = align_data(canada_shiftpath, toronto_shiftpath)
# prepare data for plotting
fire_season_curpol = canada_curpol['terclim-fwils_mean']
heatwave_days_curpol = toronto_curpol['urbclim-heatwave-days_mean']
fire_season_shiftpath = canada_shiftpath['terclim-fwils_mean']
heatwave_days_shiftpath = toronto_shiftpath['urbclim-heatwave-days_mean']
# scatter Plot: Fire Season Length vs. Heatwave Days
plt.figure(figsize=(12, 6))
plt.scatter(fire_season_curpol, heatwave_days_curpol, color='maroon', label='2020 Climate Policies')
plt.scatter(fire_season_shiftpath, heatwave_days_shiftpath, color='darkorange', label='Shifting Pathway')
plt.title('Changes in Fire Season Length vs. Heatwave Days in Toronto')
plt.xlabel('Changes in Fire Season Length (Days)')
plt.ylabel('Heatwave Days in Toronto (Days)')
plt.legend()
plt.grid(True)
plt.show()
The scatter plot highlights a direct correlation between the changes in length of Canada’s fire season and the number of heatwave days in Toronto under both scenarios: 2020 Climate Policies and Shifting Pathway. The x-axis represents the changes in fire season length (in days) across Canada, while the y-axis shows the number of heatwave days in Toronto.
In both scenarios, the data shows that as the fire season lengthens, the number of heatwave days in Toronto increases. The 2020 Climate Policies scenario exhibits a clearer linear correlation, with a consistent rise in heatwave days as the fire season extends. Notably, the data points in this scenario are much more spread out, with the number of heatwave days reaching a maximum of 53 when the changes in fire season length is around six days. In contrast, the Shifting Pathway scenario shows more tightly clustered data points, indicating less variability in the relationship. Under this scenario, the maximum number of heatwave days reaches 23 when the changes in fire season length is less than one day.
This contrast suggests that under the 2020 Climate Policies scenario, extreme heat events in Toronto increase significantly as the fire season lengthens, with greater variability and more extreme outcomes. Meanwhile, the Shifting Pathway scenario demonstrates that stronger climate policies can help keep both the length of the fire season and the frequency of heatwaves more stable, with fewer extreme outcomes.
# time Series Plot: Fire Season Length and Heatwave Days Over Time
plt.figure(figsize=(12, 6))
plt.plot(years_curpol, heatwave_days_curpol, marker='o', label='Heatwave Days (2020 Climate Policies)', linestyle='--', color='maroon')
plt.plot(years_shiftpath, heatwave_days_shiftpath, marker='o', label='Heatwave Days (Shifting Pathway)', linestyle='--', color='indianred')
plt.plot(years_curpol, fire_season_curpol, marker='o', label='Changes in Fire Season Length (2020 Climate Policies)', color='darkorange')
plt.plot(years_shiftpath, fire_season_shiftpath, marker='o', label='Changes in Fire Season Length (Shifting Pathway)', color='tan')
plt.title('Changes in Fire Season Length and Heatwave Days Over Time')
plt.xlabel('Year')
plt.ylabel('Days')
plt.legend()
plt.grid(True)
plt.show()
The time series plot provides further insight into how the fire season length and heatwave days evolve over time under both scenarios. From the present day until around 2050, both scenarios follow a similar trend, with a steady rise in both fire season length and heatwave days. However, after 2050, a clear divergence occurs.
In the 2020 Climate Policies scenario, both the fire season length and the number of heatwave days increase significantly. By 2100, Toronto experiences approximately 30 more heatwave days per year compared to the Shifting Pathway scenario, while the fire season length across Canada is around five days longer. This indicates that without more stringent climate policies, extreme heat events will escalate at a faster rate compared to fire season length, suggesting a stronger sensitivity of urban centers like Toronto to global warming.
In contrast, under the Shifting Pathway scenario, the increase in both fire season length and heatwave days stabilizes after 2050, with both metrics even showing a gradual decline in the latter part of the century. This suggests that effective climate policies can not only reduce the length of fire seasons but also mitigate the frequency and intensity of extreme heat events in urban areas. Specifically, the number of heatwave days begins to decrease after mid-century, indicating that stringent climate action can reverse some of the impacts of global warming and improve future climate conditions in cities like Toronto.
Conclusion¶
In conclusion, the analysis reveals a clear correlation between the length of the fire season in Canada and the frequency of extreme heat events in Toronto. Under the 2020 Climate Policies scenario, as the changes in fire season lengthens, the frequency of heatwave days in Toronto increases significantly, with a direct and linear relationship between these two factors. This trend suggests that without effective climate policies, both wildfire risks and urban heat events will intensify, particularly in densely populated areas like Toronto.
In contrast, the Shifting Pathway scenario, which prioritizes sustainable development and stringent climate policies, shows a more stable and reduced relationship between fire season length and heatwave frequency. The data suggests that with proactive climate action, both the changes in length of Canada's fire season and the number of heatwave days in Toronto can be mitigated, resulting in fewer extreme outcomes and a more manageable climate future. Thus, the research highlights the importance of climate policies in reducing the risks associated with both wildfires and extreme heat events, ultimately protecting both the natural environment and urban populations.
References¶
4. Answer Guiding Questions to your Research Question¶
1. How do the scenarios differ over time for each indicator?¶
Changes in Fire Season Length:
In the 2020 Climate Policies scenario, the fire season length increases steadily over time. From the present day to around 2050, the rise is gradual, but after 2050, the increase accelerates significantly, with the fire season becoming about five days longer by 2100. This indicates that, without further climate action, the fire season will lengthen substantially, particularly in southern regions of Canada.
In contrast, under the Shifting Pathway scenario, the fire season length remains more stable over time. The increase is less pronounced, and after 2050, the fire season length either stabilizes or begins to decline. This suggests that stringent climate policies can limit the growth of fire seasons and help reduce wildfire risks.Heatwave Days in Toronto:
Under the 2020 Climate Policies scenario, the number of heatwave days in Toronto increases sharply over time. From 2050 onward, the number of heatwave days grows significantly, with a projected increase of about 30 more heatwave days per year by 2100. This reflects a direct response to the warming climate, particularly in urban areas like Toronto, which will experience more extreme heat events without additional mitigation efforts.
In the Shifting Pathway scenario, the number of heatwave days increases at a slower rate, stabilizing after 2050. By the end of the century, the number of heatwave days actually begins to decrease, showing the effectiveness of climate mitigation strategies in reducing extreme heat events and improving climate conditions for cities like Toronto.
2. What are the spatial differences between scenarios for each indicator?¶
Changes in Fire Season Length:
In the 2020 Climate Policies scenario, southern regions of Canada, especially areas like British Columbia, experience a substantial increase in fire season length. The fire season is significantly longer in these areas, which are more prone to warmer, drier conditions. Conversely, northern regions see only slight changes in fire season length, indicating that the northern parts of Canada will be less affected by the prolonged fire seasons.
In the Shifting Pathway scenario, the fire season length remains more consistent across the country, with only a slight increase in southern regions. This suggests that the implementation of stringent climate policies can prevent drastic changes in fire season length, particularly in high-risk southern areas.Heatwave Days in Toronto:
In the 2020 Climate Policies scenario, Toronto's urban center slightly stands out as a hotspot for heatwave days, with the city experiencing significantly more than 42 heatwave days per year by the end of the century. The entire region sees an increase in heatwave days.
In the Shifting Pathway scenario, the number of heatwave days is lower. While the center of the city still experiences more heatwave days compared to surrounding areas, the frequency is reduced compared to the 2020 Climate Policies scenario, reflecting the benefits of strong climate policies in mitigating extreme heat.
3. Are there any correlations between your selected indicators?¶
Yes, there is a clear correlation between the length of the fire season in Canada and the number of heatwave days in Toronto.
In both the 2020 Climate Policies and Shifting Pathway scenarios, as the fire season lengthens across Canada, the number of heatwave days in Toronto increases. This suggests that warmer, drier conditions associated with longer fire seasons are also contributing to more frequent heatwaves in urban centers like Toronto.
In the 2020 Climate Policies scenario, the correlation is particularly strong, with a clear linear relationship between the two variables. As the fire season lengthens, the number of heatwave days in Toronto rises significantly, especially with greater variability and extreme outcomes.
In the Shifting Pathway scenario, the correlation still exists, but the relationship is less pronounced. Both the change in length of the fire season and the frequency of heat waves are increasing, but the rate of change is slower and the variability of the data is lower.
This suggests that stringent climate policies can reduce the intensity of the correlation between these two indicators, leading to more stable and manageable outcomes for both wildfires and extreme heat events.