From 908473dfc53fab93964e266c446470e6364ce844 Mon Sep 17 00:00:00 2001 From: Le Roux Erwan <erwan.le-roux@irstea.fr> Date: Wed, 22 Jan 2020 15:47:50 +0100 Subject: [PATCH] [paper 2] improve plot trend curves. improve swe plots for appendix examples --- .../study_visualization/study_visualizer.py | 4 +-- .../data/main_example_swe_total_plot.py | 22 ++++++++------ .../paper_past_snow_loads/paper_utils.py | 3 +- .../main_result_trends_and_return_levels.py | 29 +++++-------------- .../plot_trend_curves.py | 25 ++++++++++++++-- 5 files changed, 46 insertions(+), 37 deletions(-) diff --git a/experiment/meteo_france_data/scm_models_data/visualization/study_visualization/study_visualizer.py b/experiment/meteo_france_data/scm_models_data/visualization/study_visualization/study_visualizer.py index d6da42c2..a346d59a 100644 --- a/experiment/meteo_france_data/scm_models_data/visualization/study_visualization/study_visualizer.py +++ b/experiment/meteo_france_data/scm_models_data/visualization/study_visualization/study_visualizer.py @@ -627,7 +627,7 @@ class StudyVisualizer(VisualizationParameters): def visualize_max_graphs_poster(self, massif_name, altitude, snow_abbreviation, color, label=None, last_plot=True, ax=None, linestyle=None, - tight_pad=None, dpi=None): + tight_pad=None, dpi=None, linewidth=5): massif_names = self.study.study_massif_names # Display the graph of the max on top if ax is None: @@ -636,7 +636,7 @@ class StudyVisualizer(VisualizationParameters): x, y = self.study.ordered_years, self.study.observations_annual_maxima.df_maxima_gev.mean(axis=0) else: x, y = self.smooth_maxima_x_y(massif_names.index(massif_name)) - ax.plot(x, y, color=color, linewidth=5, label=label, linestyle=linestyle) + ax.plot(x, y, color=color, linewidth=linewidth, label=label, linestyle=linestyle) # ax.set_ylabel('{} (in {})'.format(snow_abbreviation, self.study.variable_unit), color=color, fontsize=15) ax.xaxis.set_ticks(x[2::10]) diff --git a/experiment/paper_past_snow_loads/data/main_example_swe_total_plot.py b/experiment/paper_past_snow_loads/data/main_example_swe_total_plot.py index eb32d1cc..f8560edf 100644 --- a/experiment/paper_past_snow_loads/data/main_example_swe_total_plot.py +++ b/experiment/paper_past_snow_loads/data/main_example_swe_total_plot.py @@ -8,8 +8,6 @@ from experiment.meteo_france_data.scm_models_data.visualization.study_visualizat from experiment.paper_past_snow_loads.paper_utils import dpi_paper1_figure - - def tuples_for_examples_paper1(examples_for_the_paper=True): if examples_for_the_paper: @@ -20,12 +18,13 @@ def tuples_for_examples_paper1(examples_for_the_paper=True): ] else: marker_altitude_massif_name_for_paper1 = [ - ('yellow', 600, 'Ubaye'), - ('purple', 600, 'Parpaillon'), + ('magenta', 600, 'Ubaye'), + ('darkmagenta', 600, 'Parpaillon'), + ('mediumpurple', 300, 'Aravis'), ] return marker_altitude_massif_name_for_paper1 -tuples_for_examples_paper1() + def max_graph_annual_maxima_poster(): """ @@ -36,11 +35,15 @@ def max_graph_annual_maxima_poster(): save_to_file = True study_class = CrocusSnowLoadTotal - examples_for_the_paper = True + examples_for_the_paper = False ax = plt.gca() - ax.set_ylim([0, 20]) - ax.set_yticks(list(range(0, 21, 2))) + if examples_for_the_paper: + ax.set_ylim([0, 20]) + ax.set_yticks(list(range(0, 21, 2))) + linewidth = 5 + else: + linewidth = 3 marker_altitude_massif_name_for_paper1 = tuples_for_examples_paper1(examples_for_the_paper) @@ -55,7 +58,8 @@ def max_graph_annual_maxima_poster(): tight_pad = {'h_pad': 0.2} study_visualizer.visualize_max_graphs_poster(massif_name, altitude, snow_abbreviation, color, label, last_plot, ax, tight_pad=tight_pad, - dpi=dpi_paper1_figure) + dpi=dpi_paper1_figure, + linewidth=linewidth) if __name__ == '__main__': diff --git a/experiment/paper_past_snow_loads/paper_utils.py b/experiment/paper_past_snow_loads/paper_utils.py index ffcee10d..5a45a996 100644 --- a/experiment/paper_past_snow_loads/paper_utils.py +++ b/experiment/paper_past_snow_loads/paper_utils.py @@ -6,9 +6,8 @@ from experiment.meteo_france_data.scm_models_data.visualization.study_visualizat ALL_ALTITUDES_WITHOUT_NAN from root_utils import get_display_name_from_object_type -# paper_altitudes = [300, 600, 900, 1200, 1500, 1800, 2100, 2400, 2700] paper_altitudes = ALL_ALTITUDES_WITHOUT_NAN -paper_study_classes = [CrocusSnowLoadTotal, CrocusSnowLoadEurocode, CrocusSnowLoad3Days] +paper_study_classes = [CrocusSnowLoadTotal, CrocusSnowLoadEurocode, CrocusSnowLoad3Days][:2] # dpi_paper1_figure = 700 dpi_paper1_figure = None diff --git a/experiment/paper_past_snow_loads/result_trends_and_return_levels/main_result_trends_and_return_levels.py b/experiment/paper_past_snow_loads/result_trends_and_return_levels/main_result_trends_and_return_levels.py index ca4f924b..407fae9e 100644 --- a/experiment/paper_past_snow_loads/result_trends_and_return_levels/main_result_trends_and_return_levels.py +++ b/experiment/paper_past_snow_loads/result_trends_and_return_levels/main_result_trends_and_return_levels.py @@ -8,7 +8,8 @@ from experiment.meteo_france_data.scm_models_data.visualization.study_visualizat ALL_ALTITUDES_WITHOUT_NAN from experiment.paper_past_snow_loads.paper_main_utils import load_altitude_to_visualizer from experiment.paper_past_snow_loads.paper_utils import paper_study_classes, paper_altitudes, ModelSubsetForUncertainty -from experiment.paper_past_snow_loads.result_trends_and_return_levels.plot_trend_curves import plot_trend_curves +from experiment.paper_past_snow_loads.result_trends_and_return_levels.plot_trend_curves import plot_trend_curves, \ + plot_trend_map from experiment.paper_past_snow_loads.result_trends_and_return_levels.plot_uncertainty_curves import \ plot_uncertainty_massifs from experiment.paper_past_snow_loads.result_trends_and_return_levels.plot_uncertainty_histogram import \ @@ -65,25 +66,11 @@ def intermediate_result(altitudes, massif_names=None, else: for visualizer in visualizers: _ = compute_minimized_aic(visualizer) - # Compute common max value for the colorbar - max_abs_tdrl = max([visualizer.max_abs_change for altitude, visualizer in altitude_to_visualizer.items() - if altitude >= 900]) - for altitude, visualizer in altitude_to_visualizer.items(): - if 900 <= altitude <= 4200: - add_color = (visualizer.study.altitude - 1500) % 900 == 0 - visualizer.plot_trends(max_abs_tdrl, add_colorbar=add_color) - # Plot 2700 also with a colorbar - if altitude == 2700: - visualizer.plot_trends(max_abs_tdrl, add_colorbar=True) - else: - visualizer.plot_trends(None, add_colorbar=True) - # Plot trends - altitude_to_visualizer_for_plot_trend = {a: v for a, v in altitude_to_visualizer.items() if a >= 900} - plot_trend_curves(altitude_to_visualizer_for_plot_trend) - # Plot graph + # Plots + plot_trend_map(altitude_to_visualizer) + # plot_trend_curves(altitude_to_visualizer={a: v for a, v in altitude_to_visualizer.items() if a >= 900}) # plot_uncertainty_massifs(altitude_to_visualizer) - # # Plot histogram # plot_uncertainty_histogram(altitude_to_visualizer) @@ -91,7 +78,7 @@ def major_result(): uncertainty_methods = [ConfidenceIntervalMethodFromExtremes.my_bayes, ConfidenceIntervalMethodFromExtremes.ci_mle][1:] massif_names = None - study_classes = paper_study_classes[:2] + study_classes = paper_study_classes[:1] # model_subsets_for_uncertainty = [ModelSubsetForUncertainty.stationary_gumbel, # ModelSubsetForUncertainty.stationary_gumbel_and_gev, # ModelSubsetForUncertainty.non_stationary_gumbel, @@ -105,7 +92,7 @@ def major_result(): if __name__ == '__main__': # major_result() - intermediate_result(altitudes=ALL_ALTITUDES_WITHOUT_NAN[2:], massif_names=None, + intermediate_result(altitudes=ALL_ALTITUDES_WITHOUT_NAN[:2], massif_names=None, uncertainty_methods=[ConfidenceIntervalMethodFromExtremes.my_bayes, ConfidenceIntervalMethodFromExtremes.ci_mle][1:], multiprocessing=True) @@ -134,4 +121,4 @@ if __name__ == '__main__': # non_stationary_uncertainty=[False, True]) # intermediate_result(altitudes=[300, 600, 900], massif_names=None, # uncertainty_methods=[ConfidenceIntervalMethodFromExtremes.ci_mle], - # non_stationary_uncertainty=[False, True]) \ No newline at end of file + # non_stationary_uncertainty=[False, True]) diff --git a/experiment/paper_past_snow_loads/result_trends_and_return_levels/plot_trend_curves.py b/experiment/paper_past_snow_loads/result_trends_and_return_levels/plot_trend_curves.py index 4e3d7de0..382c271f 100644 --- a/experiment/paper_past_snow_loads/result_trends_and_return_levels/plot_trend_curves.py +++ b/experiment/paper_past_snow_loads/result_trends_and_return_levels/plot_trend_curves.py @@ -8,6 +8,25 @@ from experiment.paper_past_snow_loads.study_visualizer_for_non_stationary_trends StudyVisualizerForNonStationaryTrends +def plot_trend_map(altitude_to_visualizer): + # Compute common max value for the colorbar + max_abs_changes_above_900 = [visualizer.max_abs_change + for altitude, visualizer in altitude_to_visualizer.items() + if altitude >= 900] + max_abs_tdrl_above_900 = max(max_abs_changes_above_900) if len(max_abs_changes_above_900) > 0 else None + + max_abs_tdrl_below_900 = max(altitude_to_visualizer[300].max_abs_change, altitude_to_visualizer[600].max_abs_change) + for altitude, visualizer in altitude_to_visualizer.items(): + if 900 <= altitude <= 4200: + add_color = (visualizer.study.altitude - 1500) % 900 == 0 + visualizer.plot_trends(max_abs_tdrl_above_900, add_colorbar=add_color) + # Plot 2700 also with a colorbar + if altitude == 2700: + visualizer.plot_trends(max_abs_tdrl_above_900, add_colorbar=True) + else: + visualizer.plot_trends(max_abs_tdrl_below_900, add_colorbar=altitude==600) + + def plot_trend_curves(altitude_to_visualizer: Dict[int, StudyVisualizerForNonStationaryTrends]): """ Plot a single trend curves @@ -47,9 +66,9 @@ def plot_trend_curves(altitude_to_visualizer: Dict[int, StudyVisualizerForNonSta # 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 massif at each altitude (for the percentage)', fontsize=legend_fontsize) + ax_twiny.set_xlabel('Total number of massifs at each altitude (for the percentage)', fontsize=legend_fontsize) - ax.set_ylabel('Percentage of massifs with decreasing trend (\%)', fontsize=legend_fontsize) + ax.set_ylabel('Massifs with decreasing trend (\%)', fontsize=legend_fontsize) max_percent = int(max(percent_decrease)) n = 2 + (max_percent // 10) ax_ticks = [10 * i for i in range(n)] @@ -68,7 +87,7 @@ def plot_trend_curves(altitude_to_visualizer: Dict[int, StudyVisualizerForNonSta if len(mean_decreases) > 1: label = region_name else: - label = 'Mean decrease' + label = 'Mean relative decrease' ax_twinx.plot(altitudes, mean_decrease, label=label, linewidth=linewidth, marker='o') ax_twinx.legend(loc='upper right', prop={'size': size}) -- GitLab