From 3ac9db1fe61068534a1fe0ca6c0581a73979bbf5 Mon Sep 17 00:00:00 2001 From: Le Roux Erwan <erwan.le-roux@irstea.fr> Date: Fri, 26 Feb 2021 17:45:28 +0100 Subject: [PATCH] [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. --- .../main_season_repartition_of_maxima.py | 61 +++++++++++++++---- 1 file changed, 50 insertions(+), 11 deletions(-) diff --git a/projects/archive/seasonal_analysis/main_season_repartition_of_maxima.py b/projects/archive/seasonal_analysis/main_season_repartition_of_maxima.py index a1da50b0..be0db2e2 100644 --- a/projects/archive/seasonal_analysis/main_season_repartition_of_maxima.py +++ b/projects/archive/seasonal_analysis/main_season_repartition_of_maxima.py @@ -4,21 +4,35 @@ import calendar 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.altitudes_studies import AltitudesStudies from extreme_trend.one_fold_fit.altitude_group import altitudes_for_groups, \ 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)} 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] - years = [all_years, all_years[:30], all_years[-30:]][idx] ax = plt.gca() ax2 = ax.twinx() @@ -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] 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] - 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, color=color, edgecolor=color, label='Percentage of maxima', linewidth=2) @@ -36,10 +52,10 @@ def plot_season_repartition_of_maxima(studies, massif_names, title='', idx=0): ax2.plot(month_names, mean_maxima) ax.set_ylabel('Percentages of annual maxima') - ax.set_ylim((0, 30)) + ax.set_ylim(bottom=0) ax.grid() 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) plt.close() @@ -61,25 +77,48 @@ def get_month_to_maxima(massif_names, studies, years): return month_to_maxima -if __name__ == '__main__': +def main_repartition_for_snowfall_past(): study_class = SafranSnowfall1Day # 'Vercors' - norht_massif_names = ['Oisans', 'Grandes-Rousses', 'Haute-Maurienne', 'Vanoise', 'Maurienne', 'Belledonne', 'Chartreuse', 'Haute-Tarentaise', 'Beaufortain', 'Bauges', 'Mont-Blanc', 'Aravis', 'Chablais'] south_massif_names = ['Mercantour', 'Ubaye', 'Haut_Var-Haut_Verdon', 'Parpaillon', 'Champsaur', 'Devoluy', 'Queyras', 'Pelvoux', 'Thabor'] - - - for altitudes in altitudes_for_groups: + for altitudes in altitudes_for_groups[:1]: studies = AltitudesStudies(study_class, altitudes) elevation = get_altitude_group_from_altitudes(altitudes).reference_altitude # for idx in range(3): + # idx enable to plot for some subset of dates for idx in range(1): for masssif_names, region_name in zip([norht_massif_names, south_massif_names], ['North', 'South']): plot_season_repartition_of_maxima(studies, masssif_names, '{} {}'.format(region_name, elevation), 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() + -- GitLab