Commit 3ac9db1f authored by Le Roux Erwan's avatar Le Roux Erwan
Browse files

[refactor] update main_season_repartition_of_maxima.py to compare swe results,...

[refactor] update main_season_repartition_of_maxima.py to compare swe results, for safran 2019 and adamont v2, to show the limit of their indicator.
parent c94d4dce
No related merge requests found
Showing with 50 additions and 11 deletions
+50 -11
...@@ -4,21 +4,35 @@ import calendar ...@@ -4,21 +4,35 @@ import calendar
import numpy as np import numpy as np
from extreme_data.meteo_france_data.adamont_data.abstract_adamont_study import AbstractAdamontStudy
from extreme_data.meteo_france_data.adamont_data.adamont.adamont_crocus import AdamontSwe
from extreme_data.meteo_france_data.adamont_data.adamont_scenario import rcm_scenarios_extended, AdamontScenario
from extreme_data.meteo_france_data.scm_models_data.crocus.crocus import CrocusSweTotal
from extreme_data.meteo_france_data.scm_models_data.safran.safran import SafranSnowfall1Day from extreme_data.meteo_france_data.scm_models_data.safran.safran import SafranSnowfall1Day
from extreme_data.meteo_france_data.scm_models_data.altitudes_studies import AltitudesStudies from extreme_data.meteo_france_data.scm_models_data.altitudes_studies import AltitudesStudies
from extreme_trend.one_fold_fit.altitude_group import altitudes_for_groups, \ from extreme_trend.one_fold_fit.altitude_group import altitudes_for_groups, \
get_altitude_group_from_altitudes get_altitude_group_from_altitudes
def plot_season_repartition_of_maxima(studies, massif_names, title='', idx=0): def plot_season_repartition_of_maxima(studies, massif_names, title='', idx=0, projected=False):
month_to_name = {month: calendar.month_name[month] for month in range(1, 13)} month_to_name = {month: calendar.month_name[month] for month in range(1, 13)}
all_years = studies.study.ordered_years all_years = studies.study.ordered_years
title += ['-1959-2019', '-past-1959-1988', '-recent-1990-2019'][idx] title += ' on the period '
if isinstance(studies.study, AbstractAdamontStudy):
assert studies.study.scenario is AdamontScenario.histo
title = 'Adamont v2\n' + title
title += ['HISTORICAL', '', ''][idx]
years = [all_years, all_years[:30], all_years[-30:]][idx]
else:
title = 'SAFRAN 2019\n' + title
title += ['1959-2019', '-past-1959-1988', '-recent-1990-2019'][idx]
years = [all_years, all_years[:30], all_years[-30:]][idx]
color = ['grey', 'red', 'green'][idx] color = ['grey', 'red', 'green'][idx]
years = [all_years, all_years[:30], all_years[-30:]][idx]
ax = plt.gca() ax = plt.gca()
ax2 = ax.twinx() ax2 = ax.twinx()
...@@ -27,7 +41,9 @@ def plot_season_repartition_of_maxima(studies, massif_names, title='', idx=0): ...@@ -27,7 +41,9 @@ def plot_season_repartition_of_maxima(studies, massif_names, title='', idx=0):
ordered_months = [8, 9, 10, 11, 12] + [1, 2, 3, 4, 5, 6, 7] ordered_months = [8, 9, 10, 11, 12] + [1, 2, 3, 4, 5, 6, 7]
nb_total_maxima = sum([len(v) for v in month_to_maxima.values()]) nb_total_maxima = sum([len(v) for v in month_to_maxima.values()])
percentage_maxima = [100 * len(month_to_maxima[month]) / nb_total_maxima for month in ordered_months] percentage_maxima = [100 * len(month_to_maxima[month]) / nb_total_maxima for month in ordered_months]
month_names = [month_to_name[m][:3] for m in ordered_months] assert len(percentage_maxima) == 12
month_names = [month_to_name[m][:4] for m in ordered_months]
print(month_names)
ax.bar(month_names, percentage_maxima, width=0.5, ax.bar(month_names, percentage_maxima, width=0.5,
color=color, edgecolor=color, label='Percentage of maxima', color=color, edgecolor=color, label='Percentage of maxima',
linewidth=2) linewidth=2)
...@@ -36,10 +52,10 @@ def plot_season_repartition_of_maxima(studies, massif_names, title='', idx=0): ...@@ -36,10 +52,10 @@ def plot_season_repartition_of_maxima(studies, massif_names, title='', idx=0):
ax2.plot(month_names, mean_maxima) ax2.plot(month_names, mean_maxima)
ax.set_ylabel('Percentages of annual maxima') ax.set_ylabel('Percentages of annual maxima')
ax.set_ylim((0, 30)) ax.set_ylim(bottom=0)
ax.grid() ax.grid()
ax2.set_ylabel('Mean annual maxima') ax2.set_ylabel('Mean annual maxima')
ax2.set_ylim((0, 100)) ax2.set_ylim(bottom=0)
studies.show_or_save_to_file(plot_name=title) studies.show_or_save_to_file(plot_name=title)
plt.close() plt.close()
...@@ -61,25 +77,48 @@ def get_month_to_maxima(massif_names, studies, years): ...@@ -61,25 +77,48 @@ def get_month_to_maxima(massif_names, studies, years):
return month_to_maxima return month_to_maxima
if __name__ == '__main__': def main_repartition_for_snowfall_past():
study_class = SafranSnowfall1Day study_class = SafranSnowfall1Day
# 'Vercors' # 'Vercors'
norht_massif_names = ['Oisans', 'Grandes-Rousses', 'Haute-Maurienne', 'Vanoise', norht_massif_names = ['Oisans', 'Grandes-Rousses', 'Haute-Maurienne', 'Vanoise',
'Maurienne', 'Belledonne', 'Chartreuse', 'Haute-Tarentaise', 'Maurienne', 'Belledonne', 'Chartreuse', 'Haute-Tarentaise',
'Beaufortain', 'Bauges', 'Mont-Blanc', 'Aravis', 'Chablais'] 'Beaufortain', 'Bauges', 'Mont-Blanc', 'Aravis', 'Chablais']
south_massif_names = ['Mercantour', 'Ubaye', 'Haut_Var-Haut_Verdon', 'Parpaillon', 'Champsaur', south_massif_names = ['Mercantour', 'Ubaye', 'Haut_Var-Haut_Verdon', 'Parpaillon', 'Champsaur',
'Devoluy', 'Queyras', 'Pelvoux', 'Thabor'] 'Devoluy', 'Queyras', 'Pelvoux', 'Thabor']
for altitudes in altitudes_for_groups[:1]:
for altitudes in altitudes_for_groups:
studies = AltitudesStudies(study_class, altitudes) studies = AltitudesStudies(study_class, altitudes)
elevation = get_altitude_group_from_altitudes(altitudes).reference_altitude elevation = get_altitude_group_from_altitudes(altitudes).reference_altitude
# for idx in range(3): # for idx in range(3):
# idx enable to plot for some subset of dates
for idx in range(1): for idx in range(1):
for masssif_names, region_name in zip([norht_massif_names, south_massif_names], for masssif_names, region_name in zip([norht_massif_names, south_massif_names],
['North', 'South']): ['North', 'South']):
plot_season_repartition_of_maxima(studies, masssif_names, '{} {}'.format(region_name, elevation), plot_season_repartition_of_maxima(studies, masssif_names, '{} {}'.format(region_name, elevation),
idx=idx) idx=idx)
def main_repartition_for_swe_projected():
for study_class in [AdamontSwe, CrocusSweTotal]:
masssif_names = ['Oisans', 'Grandes-Rousses', 'Haute-Maurienne', 'Vanoise',
'Maurienne', 'Belledonne', 'Chartreuse', 'Haute-Tarentaise',
'Beaufortain', 'Bauges', 'Mont-Blanc', 'Aravis', 'Chablais',
'Mercantour', 'Ubaye', 'Haut_Var-Haut_Verdon', 'Parpaillon', 'Champsaur',
'Devoluy', 'Queyras', 'Pelvoux', 'Thabor']
region_name = 'French Alps'
for altitudes in altitudes_for_groups[1:]:
studies = AltitudesStudies(study_class, altitudes)
if issubclass(study_class, AbstractAdamontStudy):
print(studies.study.scenario)
title = 'for elevations ' + get_altitude_group_from_altitudes(altitudes).formula
# for idx in range(3):
# idx enable to plot for some subset of dates
for idx in range(1):
plot_season_repartition_of_maxima(studies, masssif_names, title,
idx=idx)
if __name__ == '__main__':
# main_repartition_for_snowfall_past()
main_repartition_for_swe_projected()
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment