Degree Heating Weeks#

../../../_images/043622a3463a2ceb9bb48268e8d07935976c800275468271a1e468e6ea52325d.png

Figure. NOAA Coral Reef Watch Degree Heating Weeks at the virtual station in the vicinity of Palau. The Degree Heating Week (DHW) value is shown on the vertical axis on the right. The coral bleaching heat stress level (or Bleaching Alert Level) – Warning, Alert Level 1, Alert Level 2 – are color-coded and shaded-in along the bottom horizontal axis. Red dashed lines across the graphs indicate DHW threshold values of 4- and 8-degree Celsius-weeks (triggers for Bleaching Alert Levels 1 and 2, respectively). The representative SST value is shown on the vertical axis on the left. The monthly mean climatology, the MMM, and the bleaching threshold SST are also provided on the graph.

Hide code cell source
import warnings
warnings.filterwarnings("ignore")

import sys
import os
import os.path as op

import geopandas as gpd
import pandas as pd
import matplotlib.pyplot as plt
from myst_nb import glue

sys.path.append("../../../../indicators_setup")
from ind_setup.plotting import plot_dhw, plot_dhw_perpetual_year, plot_dhw_bleaching_levels, add_oni_cat

sys.path.append("../../../functions")
from ocean import process_bleaching_levels
from data_downloaders import download_oni_index

Setup#

Define area of interest

path_data = "sst_daily_1981_2024_palau.nc"
path_figs = "../../../matrix_cc/figures"

lon_site, lat_site = 134.368203, 7.322074

# Area of interest
lon_range = [129.4088, 137.0541]
lat_range = [1.5214, 11.6587]

EEZ shapefile

shp_f = op.join(
    os.getcwd(), "..", "..", "..", "data/Palau_EEZ/pw_eez_pol_april2022.shp"
)
shp_eez = gpd.read_file(shp_f)

Download Data#

The NOAA Coral Reef Watch (CRW) daily global 5km satellite coral bleaching Degree Heating Week (DHW) product for the virtual station in the vicinity of Palau shows accumulated heat stress, which can lead to coral bleaching and death (Figure 15). Bleaching heat stress is categorized into risk levels based on the DHW values, which are directly related to the timing and intensity of coral bleaching – Bleaching Warning (0 < DHW < 4), Bleaching Alert Level 1 (4 <= DHW < 8), and (8 <= DHW < 12). At Bleaching Alert Level 1, significant bleaching is expected within a few weeks of the alert. At Bleaching Alert Level 2 and above, severe, widespread bleaching and significant coral mortality are likely.

https://coralreefwatch.noaa.gov/product/5km/methodology.php#dhw

Hide code cell source
"""
Name:
Palau
Polygon Middle Longitude:
134.4250 
Polygon Middle Latitude:
7.6750  
Averaged Maximum Monthly Mean:
29.2309
Averaged Monthly Mean (Jan-Dec):
28.0424 27.7264 27.8581 28.4679 29.1780 29.2309 28.8550 28.7810 28.8377 29.0823 29.1088 28.8078
First Valid DHW Date:
1985 25 03
First Valid BAA Date:
1985 31 03
"""
data_crw = pd.read_csv(
    "https://coralreefwatch.noaa.gov/product/vs/data/palau.txt", sep=r"\s+", skiprows=20
)
data_crw.to_csv("data_crw_palau.csv")
data_crw.index = pd.to_datetime(
    data_crw["YYYY"].astype(str)
    + data_crw["MM"].astype(str)
    + data_crw["DD"].astype(str),
    format="%Y%m%d",
)
data_crw = data_crw.groupby(level=0).max()
# data_crw = data_crw[~data_crw.index.duplicated()]
data_crw.sort_index(inplace=True)
# data_crw = data_crw.resample('W').mean()
data_crw = data_crw[:"2024"]

Analysis#

Stress Level

No Stress HotSpot <= 0
Bleaching Watch 0 < HotSpot < 1
Bleaching Warning 1 <= HotSpot and 0 < DHW < 4
Bleaching Alert Level 1 1 <= HotSpot and 4 <= DHW < 8
Bleaching Alert Level 2 1 <= HotSpot and 8 <= DHW

Full time period#

fig, ax2 = plot_dhw(data_crw)
plt.savefig(op.join(path_figs, "F13_DHW.png"), dpi=300, bbox_inches="tight")
glue("dhw_all", fig, display=False)
../../../_images/043622a3463a2ceb9bb48268e8d07935976c800275468271a1e468e6ea52325d.png

Last 10 years#

fig, ax2 = plot_dhw(data_crw)
ax2.set_xlim("2014", "2024")
(np.float64(16071.0), np.float64(19723.0))
../../../_images/fd8ce2b48d59c73fac1822bf26eacc545fa1cb8bc140bae0e94ddbbbd7105088.png

Bleaching alert levels: change#

df, days_pivot = process_bleaching_levels(data_crw)
days_pivot/10
period First 10 years Last 10 years
bleaching_level
No stress 143.8 26.0
Bleaching Watch 187.9 199.8
Bleaching Warning 11.1 53.0
Alert level 1 0.0 34.9
Alert level 2 4.4 33.6
fig = plot_dhw_bleaching_levels(df, days_pivot)
../../../_images/3d593151a81faaeb314bb5cb60928476e9109da951f88145849caaeec60aee28.png
df
YYYY MM DD SST_MIN SST_MAX SST@90th_HS SSTA@90th_HS 90th_HS>0 DHW_from_90th_HS>1 BAA_7day_max year bleaching_level period
1985-01-01 1985 1 1 28.12 28.32 28.26 -0.2252 0.00 0.0000 0 1985 No stress First 10 years
1985-01-02 1985 1 2 28.03 28.29 28.24 -0.2561 0.00 0.0000 0 1985 No stress First 10 years
1985-01-03 1985 1 3 28.18 28.42 28.36 -0.1171 0.00 0.0000 0 1985 No stress First 10 years
1985-01-04 1985 1 4 28.27 28.50 28.43 -0.0190 0.00 0.0000 0 1985 No stress First 10 years
1985-01-05 1985 1 5 28.16 28.40 28.37 -0.0619 0.00 0.0000 0 1985 No stress First 10 years
... ... ... ... ... ... ... ... ... ... ... ... ... ...
2024-12-27 2024 12 27 29.67 29.95 29.84 1.3003 0.64 4.0871 1 2024 Alert level 1 Last 10 years
2024-12-28 2024 12 28 29.48 29.94 29.81 1.3745 0.55 4.0871 1 2024 Alert level 1 Last 10 years
2024-12-29 2024 12 29 29.48 29.94 29.80 1.4032 0.55 3.9429 1 2024 Bleaching Warning Last 10 years
2024-12-30 2024 12 30 29.39 29.87 29.76 1.3426 0.48 3.9429 1 2024 Bleaching Warning Last 10 years
2024-12-31 2024 12 31 29.52 29.84 29.74 1.1926 0.49 3.7800 1 2024 Bleaching Warning Last 10 years

13890 rows × 13 columns

Perpetual Year#

fig, ax2 = plot_dhw_perpetual_year(data_crw, yeari=1985, yeare=2025)
../../../_images/114f779bb421761136624a467e37a06cd7db969140b415092bf6f69eb0b7601f.png

ONI index analysis#

p_data = 'https://psl.noaa.gov/data/correlation/oni.data'
df1 = download_oni_index(p_data)
df1['dhw'] = df.select_dtypes(include="number").resample("MS").mean()['DHW_from_90th_HS>1']
df1 = df1.dropna()
df1 = add_oni_cat(df1, lims = [-0.5, 0.5])
df1
ONI dhw oni_cat
1985-01-01 -1.04 0.000000 -1
1985-02-01 -0.85 0.000000 -1
1985-03-01 -0.77 0.000000 -1
1985-04-01 -0.78 0.000000 -1
1985-05-01 -0.78 0.120506 -1
... ... ... ...
2024-08-01 -0.07 7.948545 0
2024-09-01 -0.17 8.623337 0
2024-10-01 -0.21 8.486539 0
2024-11-01 -0.30 7.650193 0
2024-12-01 -0.42 4.291065 0

480 rows × 3 columns

fig, ax = plt.subplots(figsize=(17, 3))
# im = ax.scatter(df1.index, df1['dhw'], c=df1.ONI, s = 20, cmap = 'RdBu_r', vmin = -1, vmax = 1)
im = ax.scatter(df1.index, df1['dhw'], c=df1.oni_cat, s = 30, cmap = 'RdBu_r', ec = 'k', linewidths = .4, vmin = -1, vmax = 1, alpha = .5)
cbar = plt.colorbar(im, ax=ax, label='ONI value')
cbar.set_ticks([-1, 0, 1])
cbar.set_ticklabels(["La Niña", "Neutral", "El Niño"])
ax.set_ylabel('DHW (°C-weeks)')
ax.set_title('DHW at Palau with ONI values')
Text(0.5, 1.0, 'DHW at Palau with ONI values')
../../../_images/c21a5972eae7d680d1bfba7438317d84dd818abf961e558ac2295f82272d86c5.png