Skip to content

Commit

Permalink
monitor/multi_dataset.py improvements: allow data w/o timerange a…
Browse files Browse the repository at this point in the history
…nd improve text formatting (#3528)

Co-authored-by: Romain Beucher <[email protected]>
  • Loading branch information
schlunma and rbeucher authored Feb 20, 2024
1 parent 0c933ad commit 3fee066
Showing 1 changed file with 31 additions and 36 deletions.
67 changes: 31 additions & 36 deletions esmvaltool/diag_scripts/monitor/multi_datasets.py
Original file line number Diff line number Diff line change
Expand Up @@ -946,15 +946,24 @@ def _add_stats(self, plot_type, axes, dim_coords, dataset,
mean.data,
dataset['units'],
)
axes.text(x_pos, y_pos, f"{mean.data:.2f}{cube.units}",
fontsize=fontsize, transform=axes.transAxes)
if np.abs(mean.data) >= 0.1:
mean_val = f"{mean.data:.2f} {cube.units}"
else:
mean_val = f"{mean.data:.2e} {cube.units}"
axes.text(
x_pos, y_pos, mean_val, fontsize=fontsize, transform=axes.transAxes
)
if ref_cube is None:
return

# Weighted RMSE
rmse = (cube - ref_cube).collapsed(dim_coords, iris.analysis.RMS,
weights=weights)
axes.text(x_pos_bias, y_pos, f"RMSE={rmse.data:.2f}{cube.units}",
if np.abs(rmse.data) >= 0.1:
rmse_val = f"{rmse.data:.2f} {cube.units}"
else:
rmse_val = f"{rmse.data:.2e} {cube.units}"
axes.text(x_pos_bias, y_pos, f"RMSE={rmse_val}",
fontsize=fontsize, transform=axes.transAxes)
logger.info(
"Area-weighted RMSE of %s for %s = %f%s",
Expand Down Expand Up @@ -1193,8 +1202,7 @@ def _plot_map_with_ref(self, plot_func, dataset, ref_dataset):
ref_dataset)

# Customize plot
fig.suptitle(f"{dataset['long_name']} ({dataset['start_year']}-"
f"{dataset['end_year']})")
fig.suptitle(dataset['long_name'])
self._process_pyplot_kwargs(plot_type, dataset)

# Rasterization
Expand Down Expand Up @@ -1249,8 +1257,7 @@ def _plot_map_without_ref(self, plot_func, dataset):

# Customize plot
axes.set_title(self._get_label(dataset))
fig.suptitle(f"{dataset['long_name']} ({dataset['start_year']}-"
f"{dataset['end_year']})")
fig.suptitle(dataset['long_name'])
self._process_pyplot_kwargs(plot_type, dataset)

# Rasterization
Expand Down Expand Up @@ -1351,8 +1358,7 @@ def _plot_zonal_mean_profile_with_ref(self, plot_func, dataset,
ref_dataset)

# Customize plot
fig.suptitle(f"{dataset['long_name']} ({dataset['start_year']}-"
f"{dataset['end_year']})")
fig.suptitle(dataset['long_name'])
self._process_pyplot_kwargs(plot_type, dataset)

# Rasterization
Expand Down Expand Up @@ -1404,8 +1410,7 @@ def _plot_zonal_mean_profile_without_ref(self, plot_func, dataset):

# Customize plot
axes.set_title(self._get_label(dataset))
fig.suptitle(f"{dataset['long_name']} ({dataset['start_year']}-"
f"{dataset['end_year']})")
fig.suptitle(dataset['long_name'])
axes.set_xlabel('latitude [°N]')
z_coord = cube.coord(axis='Z')
axes.set_ylabel(f'{z_coord.long_name} [{z_coord.units}]')
Expand Down Expand Up @@ -1463,8 +1468,7 @@ def _plot_hovmoeller_z_vs_time_without_ref(self, plot_func, dataset):

# Customize plot
axes.set_title(self._get_label(dataset))
fig.suptitle(f"{dataset['long_name']} ({dataset['start_year']}-"
f"{dataset['end_year']})")
fig.suptitle(dataset['long_name'])
z_coord = cube.coord(axis='Z')
axes.set_ylabel(f'{z_coord.long_name} [{z_coord.units}]')
if self.plots[plot_type]['log_y']:
Expand Down Expand Up @@ -1590,8 +1594,7 @@ def _plot_hovmoeller_z_vs_time_with_ref(self, plot_func, dataset,
ref_dataset)

# Customize plot
fig.suptitle(f"{dataset['long_name']} ({dataset['start_year']}-"
f"{dataset['end_year']})")
fig.suptitle(dataset['long_name'])
self._process_pyplot_kwargs(plot_type, dataset)

# Rasterization
Expand Down Expand Up @@ -1699,8 +1702,7 @@ def _plot_hovmoeller_time_vs_lat_or_lon_with_ref(self, plot_func, dataset,
cbar_bias.ax.tick_params(labelsize=fontsize)

# Customize plot
fig.suptitle(f"{dataset['long_name']} ({dataset['start_year']}-"
f"{dataset['end_year']})")
fig.suptitle(dataset['long_name'])
self._process_pyplot_kwargs(plot_type, dataset)

# Rasterization
Expand Down Expand Up @@ -1752,8 +1754,7 @@ def _plot_hovmoeller_time_vs_lat_or_lon_without_ref(self, plot_func,

# Customize plot
axes.set_title(self._get_label(dataset))
fig.suptitle(f"{dataset['long_name']} ({dataset['start_year']}-"
f"{dataset['end_year']})")
fig.suptitle(dataset['long_name'])
if 'latitude' in dim_coords_dat:
axes.set_xlabel('latitude [°N]')
elif 'longitude' in dim_coords_dat:
Expand Down Expand Up @@ -1842,7 +1843,7 @@ def _get_multi_dataset_facets(datasets):
multi_dataset_facets = {}
for key in all_keys:
if all(d.get(key) == datasets[0].get(key) for d in datasets):
multi_dataset_facets[key] = datasets[0][key]
multi_dataset_facets[key] = datasets[0].get(key)
else:
multi_dataset_facets[key] = f'ambiguous_{key}'
return multi_dataset_facets
Expand Down Expand Up @@ -2058,8 +2059,7 @@ def create_map_plot(self, datasets):
)
caption = (
f"Map plot of {dataset['long_name']} of dataset "
f"{dataset['dataset']} (project {dataset['project']}) "
f"from {dataset['start_year']} to {dataset['end_year']}."
f"{dataset['dataset']} (project {dataset['project']})."
)
else:
(plot_path, netcdf_paths) = (
Expand All @@ -2069,8 +2069,7 @@ def create_map_plot(self, datasets):
f"Map plot of {dataset['long_name']} of dataset "
f"{dataset['dataset']} (project {dataset['project']}) "
f"including bias relative to {ref_dataset['dataset']} "
f"(project {ref_dataset['project']}) from "
f"{dataset['start_year']} to {dataset['end_year']}."
f"(project {ref_dataset['project']})."
)
ancestors.append(ref_dataset['filename'])

Expand Down Expand Up @@ -2135,8 +2134,7 @@ def create_zonal_mean_profile_plot(self, datasets):
)
caption = (
f"Zonal mean profile of {dataset['long_name']} of dataset "
f"{dataset['dataset']} (project {dataset['project']}) "
f"from {dataset['start_year']} to {dataset['end_year']}."
f"{dataset['dataset']} (project {dataset['project']})."
)
else:
(plot_path, netcdf_paths) = (
Expand All @@ -2147,8 +2145,7 @@ def create_zonal_mean_profile_plot(self, datasets):
f"Zonal mean profile of {dataset['long_name']} of dataset "
f"{dataset['dataset']} (project {dataset['project']}) "
f"including bias relative to {ref_dataset['dataset']} "
f"(project {ref_dataset['project']}) from "
f"{dataset['start_year']} to {dataset['end_year']}."
f"(project {ref_dataset['project']})."
)
ancestors.append(ref_dataset['filename'])

Expand Down Expand Up @@ -2390,8 +2387,8 @@ def create_hovmoeller_z_vs_time_plot(self, datasets):
caption = (
f"Hovmoeller Z vs. time plot of {dataset['long_name']} "
f"of dataset "
f"{dataset['dataset']} (project {dataset['project']}) "
f"from {dataset['start_year']} to {dataset['end_year']}.")
f"{dataset['dataset']} (project {dataset['project']})."
)
else:
(plot_path,
netcdf_paths) = (self._plot_hovmoeller_z_vs_time_with_ref(
Expand All @@ -2401,8 +2398,8 @@ def create_hovmoeller_z_vs_time_plot(self, datasets):
f"of dataset "
f"{dataset['dataset']} (project {dataset['project']}) "
f"including bias relative to {ref_dataset['dataset']} "
f"(project {ref_dataset['project']}) from "
f"{dataset['start_year']} to {dataset['end_year']}.")
f"(project {ref_dataset['project']})."
)
ancestors.append(ref_dataset['filename'])

# If statistics are shown add a brief description to the caption
Expand Down Expand Up @@ -2467,8 +2464,7 @@ def create_hovmoeller_time_vs_lat_or_lon_plot(self, datasets):
)
caption = (
f"Hovmoeller plot of {dataset['long_name']} of dataset "
f"{dataset['dataset']} (project {dataset['project']}) "
f"from {dataset['start_year']} to {dataset['end_year']}."
f"{dataset['dataset']} (project {dataset['project']})."
)
else:
(plot_path, netcdf_paths) = (
Expand All @@ -2479,8 +2475,7 @@ def create_hovmoeller_time_vs_lat_or_lon_plot(self, datasets):
f"Hovmoeller plot of {dataset['long_name']} of dataset "
f"{dataset['dataset']} (project {dataset['project']}) "
f"including bias relative to {ref_dataset['dataset']} "
f"(project {ref_dataset['project']}) from "
f"{dataset['start_year']} to {dataset['end_year']}."
f"(project {ref_dataset['project']})."
)
ancestors.append(ref_dataset['filename'])

Expand Down

0 comments on commit 3fee066

Please sign in to comment.