From e4bc0446cdda173e9c00fe0ed128f58880590c50 Mon Sep 17 00:00:00 2001 From: Le Roux Erwan <erwan.le-roux@irstea.fr> Date: Tue, 31 Mar 2020 19:27:32 +0200 Subject: [PATCH] [contrasting project] add plot_contrasting_trend_curves_massif --- .../main_result.py | 12 ++-- .../plot_contrasting_trend_curves.py | 63 ++++++++++++++++++- .../snow_load_impact/__init__.py | 0 .../short_snow_load_partition.py | 5 +- 4 files changed, 73 insertions(+), 7 deletions(-) create mode 100644 projects/contrasting_trends_in_snow_loads/snow_load_impact/__init__.py rename projects/contrasting_trends_in_snow_loads/{ => snow_load_impact}/short_snow_load_partition.py (98%) diff --git a/projects/contrasting_trends_in_snow_loads/main_result.py b/projects/contrasting_trends_in_snow_loads/main_result.py index 6dbcde6a..ec17b4e1 100644 --- a/projects/contrasting_trends_in_snow_loads/main_result.py +++ b/projects/contrasting_trends_in_snow_loads/main_result.py @@ -19,7 +19,8 @@ from extreme_data.meteo_france_data.scm_models_data.crocus.crocus import CrocusS CrocusSnowLoad5Days, CrocusSnowLoad7Days, CrocusSnowLoad1Day from extreme_fit.model.result_from_model_fit.result_from_extremes.confidence_interval_method import \ ConfidenceIntervalMethodFromExtremes -from projects.contrasting_trends_in_snow_loads.plot_contrasting_trend_curves import plot_contrasting_trend_curves +from projects.contrasting_trends_in_snow_loads.plot_contrasting_trend_curves import plot_contrasting_trend_curves, \ + plot_contrasting_trend_curves_massif from projects.exceeding_snow_loads.section_results.main_result_trends_and_return_levels import \ compute_minimized_aic from root_utils import NB_CORES @@ -49,14 +50,16 @@ def intermediate_result(altitudes, massif_names=None, # Compute minimized value efficiently visualizers = list(altitude_to_visualizer.values()) if multiprocessing: - with Pool(NB_CORES) as p: + with Pool(4) as p: _ = p.map(compute_minimized_aic, visualizers) else: for visualizer in visualizers: _ = compute_minimized_aic(visualizer) # Plots - plot_contrasting_trend_curves(altitude_to_visualizer, all_regions=True) + # plot_contrasting_trend_curves(altitude_to_visualizer, all_regions=True) + plot_contrasting_trend_curves_massif(altitude_to_visualizer, all_regions=True) + def major_result(): uncertainty_methods = [ConfidenceIntervalMethodFromExtremes.my_bayes, @@ -73,10 +76,11 @@ def major_result(): rainfall_classes = [SafranRainfall1Day, SafranRainfall3Days, SafranRainfall5Days, SafranRainfall7Days] study_classes = precipitation_classes + snow_load_classes # study_classes = snowfall_classes + rainfall_classes - for study_class in snowfall_classes: + for study_class in snowfall_classes[:1]: intermediate_result(altitudes, massif_names, model_subsets_for_uncertainty, uncertainty_methods, study_class, multiprocessing=True) + """ est ce qu il y a une croissance signifcative en pluie, diff --git a/projects/contrasting_trends_in_snow_loads/plot_contrasting_trend_curves.py b/projects/contrasting_trends_in_snow_loads/plot_contrasting_trend_curves.py index a84ca2f9..1a75bb42 100644 --- a/projects/contrasting_trends_in_snow_loads/plot_contrasting_trend_curves.py +++ b/projects/contrasting_trends_in_snow_loads/plot_contrasting_trend_curves.py @@ -8,6 +8,67 @@ from extreme_trend.visualizers.study_visualizer_for_non_stationary_trends import StudyVisualizerForNonStationaryTrends +def plot_contrasting_trend_curves_massif(altitude_to_visualizer: Dict[int, StudyVisualizerForNonStationaryTrends], + all_regions=False): + """ + Plot a single trend curves + :return: + """ + visualizers = list(altitude_to_visualizer.values()) + visualizer = visualizers[0] + altitudes = list(altitude_to_visualizer.keys()) + + ax = create_adjusted_axes(1, 1) + # ax_twinx = ax.twinx() + ax_twinx = ax + ax_twiny = ax.twiny() + + # parameters + width = 150 + size = 20 + legend_fontsize = 20 + color = 'white' + labelsize = 15 + linewidth = 3 + + for ax_horizontal in [ax, ax_twiny]: + if ax_horizontal == ax_twiny: + ax_horizontal.plot(altitudes, [0 for _ in altitudes], linewidth=0) + else: + ax_horizontal.set_xlabel('Altitude', fontsize=legend_fontsize) + ax_horizontal.set_xticks(altitudes) + # ax_horizontal.set_xlim([700, 5000]) + ax_horizontal.tick_params(labelsize=labelsize) + + # Set the number of massifs on the upper axis + ax_twiny.set_xticklabels([v.study.nb_study_massif_names for v in altitude_to_visualizer.values()]) + ax_twiny.set_xlabel('Total number of massifs at each altitude (for the percentage)', fontsize=legend_fontsize) + + ax_twinx.yaxis.grid() + + ax_twinx.set_ylabel(visualizer.label, fontsize=legend_fontsize) + for j, massif_name in enumerate(visualizer.study.study_massif_names): + massif_visualizers = [v for v in visualizers if massif_name in v.massif_name_to_change_value] + changes = [v.massif_name_to_relative_change_value[massif_name] for v in massif_visualizers] + massif_altitudes = [v.study.altitude for v in massif_visualizers] + label = massif_name.replace('-', '').replace('_', '') + if j < 10: + linestyle = 'solid' + elif j < 20: + linestyle = 'dashed' + else: + linestyle = 'dotted' + ax_twinx.plot(massif_altitudes, changes, label=label, linewidth=linewidth, marker='o', linestyle=linestyle) + ax_twinx.legend(loc='upper right', prop={'size': 5}) + + ax.axhline(y=0, color='k') + + # Save plot + visualizer.plot_name = 'Trend curves for' + visualizer.study.variable_name + visualizer.show_or_save_to_file(no_title=True, dpi=dpi_paper1_figure, folder_for_variable=False) + plt.close() + + def plot_contrasting_trend_curves(altitude_to_visualizer: Dict[int, StudyVisualizerForNonStationaryTrends], all_regions=False): """ @@ -21,7 +82,7 @@ def plot_contrasting_trend_curves(altitude_to_visualizer: Dict[int, StudyVisuali ax_twinx = ax ax_twiny = ax.twiny() - trend_summary_values = list(zip(*[v.trend_summary_contrasting_values(all_regions=all_regions) for v in altitude_to_visualizer.values()])) + trend_summary_values = list(zip(*[v.trend_summary_contrasting_values(regions=all_regions) for v in altitude_to_visualizer.values()])) altitudes, *mean_changes = trend_summary_values # parameters diff --git a/projects/contrasting_trends_in_snow_loads/snow_load_impact/__init__.py b/projects/contrasting_trends_in_snow_loads/snow_load_impact/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/projects/contrasting_trends_in_snow_loads/short_snow_load_partition.py b/projects/contrasting_trends_in_snow_loads/snow_load_impact/short_snow_load_partition.py similarity index 98% rename from projects/contrasting_trends_in_snow_loads/short_snow_load_partition.py rename to projects/contrasting_trends_in_snow_loads/snow_load_impact/short_snow_load_partition.py index 5405c294..ee3aaca3 100644 --- a/projects/contrasting_trends_in_snow_loads/short_snow_load_partition.py +++ b/projects/contrasting_trends_in_snow_loads/snow_load_impact/short_snow_load_partition.py @@ -69,7 +69,7 @@ def main_snow_load_maxima_partition(year_min, year_max): rainfall_classes = [SafranRainfall1Day, SafranRainfall3Days, SafranRainfall5Days, SafranRainfall7Days] snowfall_classes = [SafranSnowfall1Day, SafranSnowfall3Days, SafranSnowfall5Days, SafranSnowfall7Days] snow_load_classes = [CrocusSnowLoad1Day, CrocusSnowLoad3Days, CrocusSnowLoad5Days, CrocusSnowLoad7Days] - classes = list(zip(rainfall_classes, snowfall_classes, snow_load_classes))[:1] + classes = list(zip(rainfall_classes, snowfall_classes, snow_load_classes))[1:2] nb_top = 5 for study_classes in classes: altitude_to_s = OrderedDict() @@ -85,8 +85,9 @@ def main_snow_load_maxima_partition(year_min, year_max): # print(s) altitude_to_s[altitude] = s df_final = pd.DataFrame(altitude_to_s).transpose().round(2) - print(nb_top) + print(nb_top, year_min, year_max) print(df_final) + print('\n\n') if __name__ == '__main__': -- GitLab