From b57cce6286a4b226290e71e9297ce62192b4f45b Mon Sep 17 00:00:00 2001 From: Le Roux Erwan <erwan.le-roux@irstea.fr> Date: Mon, 15 Jun 2020 14:00:49 +0200 Subject: [PATCH] [contrasting] plot derivative only for significative models --- extreme_trend/abstract_gev_trend_test.py | 7 +++++++ .../main_snowfall_article.py | 6 +++--- .../snowfall_plot.py | 19 ++++++++++++------- .../validation_plot.py | 12 ++++++------ 4 files changed, 28 insertions(+), 16 deletions(-) diff --git a/extreme_trend/abstract_gev_trend_test.py b/extreme_trend/abstract_gev_trend_test.py index b0c829ac..bf235c31 100644 --- a/extreme_trend/abstract_gev_trend_test.py +++ b/extreme_trend/abstract_gev_trend_test.py @@ -490,3 +490,10 @@ class AbstractGevTrendTest(object): gev_params.location = param_name_to_value[GevParams.LOC] gev_params.scale = param_name_to_value[GevParams.SCALE] return gev_params.mean + + def change_in_mean_for_the_last_x_years(self, nb_years): + last_mean = self.unconstrained_estimator_gev_params_last_year.mean + old_mean = self.get_unconstrained_gev_params(year=self.years[-nb_years]).mean + return last_mean - old_mean + + diff --git a/projects/contrasting_trends_in_snow_loads/article2_snowfall_versus_time_and_altitude/main_snowfall_article.py b/projects/contrasting_trends_in_snow_loads/article2_snowfall_versus_time_and_altitude/main_snowfall_article.py index d162a4e3..484f59b6 100644 --- a/projects/contrasting_trends_in_snow_loads/article2_snowfall_versus_time_and_altitude/main_snowfall_article.py +++ b/projects/contrasting_trends_in_snow_loads/article2_snowfall_versus_time_and_altitude/main_snowfall_article.py @@ -5,7 +5,7 @@ import matplotlib as mpl from extreme_data.meteo_france_data.scm_models_data.safran.safran import SafranSnowfall1Day from projects.contrasting_trends_in_snow_loads.article2_snowfall_versus_time_and_altitude.snowfall_plot import \ - plot_snowfall_mean, plot_snowfall_time_derivative_mean + plot_snowfall_mean, plot_snowfall_change_mean from projects.contrasting_trends_in_snow_loads.article2_snowfall_versus_time_and_altitude.study_visualizer_for_mean_values import \ StudyVisualizerForMeanValues from projects.contrasting_trends_in_snow_loads.article2_snowfall_versus_time_and_altitude.validation_plot import validation_plot @@ -74,10 +74,10 @@ def intermediate_result(altitudes, massif_names=None, # Plots validation_plot(altitude_to_visualizer, order_derivative=0) - # validation_plot(altitude_to_visualizer, order_derivative=1) + validation_plot(altitude_to_visualizer, order_derivative=1) plot_snowfall_mean(altitude_to_visualizer) plot_selection_curves(altitude_to_visualizer, paper1=False) - # plot_snowfall_time_derivative_mean(altitude_to_visualizer) + plot_snowfall_change_mean(altitude_to_visualizer) def major_result(): diff --git a/projects/contrasting_trends_in_snow_loads/article2_snowfall_versus_time_and_altitude/snowfall_plot.py b/projects/contrasting_trends_in_snow_loads/article2_snowfall_versus_time_and_altitude/snowfall_plot.py index cc68f21a..8b9b78d9 100644 --- a/projects/contrasting_trends_in_snow_loads/article2_snowfall_versus_time_and_altitude/snowfall_plot.py +++ b/projects/contrasting_trends_in_snow_loads/article2_snowfall_versus_time_and_altitude/snowfall_plot.py @@ -20,7 +20,7 @@ def fit_linear_regression(x, y): return a, b, r2_score -def plot_snowfall_time_derivative_mean(altitude_to_visualizer: Dict[int, StudyVisualizerForMeanValues]): +def plot_snowfall_change_mean(altitude_to_visualizer: Dict[int, StudyVisualizerForMeanValues]): visualizer = list(altitude_to_visualizer.values())[0] study = visualizer.study # Plot the curve for the evolution of the mean @@ -72,7 +72,6 @@ def plot_mean(altitude_to_visualizer: Dict[int, StudyVisualizerForMeanValues], d visualizers = list(altitude_to_visualizer.values()) visualizer = visualizers[0] study = visualizer.study - year = study.year_max for massif_id, massif_name in enumerate(visualizer.study.all_massif_names()): altitudes_massif = [a for a, v in altitude_to_visualizer.items() @@ -81,13 +80,19 @@ def plot_mean(altitude_to_visualizer: Dict[int, StudyVisualizerForMeanValues], d trend_tests = [altitude_to_visualizer[a].massif_name_to_trend_test_that_minimized_aic[massif_name] for a in altitudes_massif] if derivative: - moment = 'time derivative of the mean' - values = [t.first_derivative_mean_value(year=year) for t in trend_tests] + moment = 'change in 10 years for significant models' + values = [t.change_in_mean_for_the_last_x_years(nb_years=10) for t in trend_tests + if t.is_significant] + altitudes_values = [a for a in altitudes_massif + if altitude_to_visualizer[a].massif_name_to_trend_test_that_minimized_aic[massif_name].is_significant] else: moment = 'mean' - values = [t.mean_value(year=year) for t in trend_tests] - massif_name_to_linear_regression_result[massif_name] = fit_linear_regression(altitudes_massif, values) - plot_values_against_altitudes(ax, altitudes_massif, massif_id, massif_name, moment, study, values, visualizer) + values = [t.unconstrained_estimator_gev_params_last_year.mean for t in trend_tests] + altitudes_values = altitudes_massif + # Plot + if len(altitudes_values) >= 2: + massif_name_to_linear_regression_result[massif_name] = fit_linear_regression(altitudes_values, values) + plot_values_against_altitudes(ax, altitudes_values, massif_id, massif_name, moment, study, values, visualizer) ax.legend(prop={'size': 7}, ncol=3) visualizer.show_or_save_to_file(dpi=500, add_classic_title=False) plt.close() diff --git a/projects/contrasting_trends_in_snow_loads/article2_snowfall_versus_time_and_altitude/validation_plot.py b/projects/contrasting_trends_in_snow_loads/article2_snowfall_versus_time_and_altitude/validation_plot.py index 354de6fe..971a7c92 100644 --- a/projects/contrasting_trends_in_snow_loads/article2_snowfall_versus_time_and_altitude/validation_plot.py +++ b/projects/contrasting_trends_in_snow_loads/article2_snowfall_versus_time_and_altitude/validation_plot.py @@ -69,12 +69,12 @@ def plot_relative_difference_map_order_one(visualizer: StudyVisualizerForMeanVal study = visualizer.study label = ' time derivative of mean annual maxima of {} ({})'.format(SCM_STUDY_CLASS_TO_ABBREVIATION[type(study)], study.variable_unit) - visualizer.plot_abstract_fast(massif_name_to_value=visualizer.massif_name_to_change_ratio_in_empirical_mean, - label='Empirical' + label, negative_and_positive_values=False, graduation=0.5) + # visualizer.plot_abstract_fast(massif_name_to_value=visualizer.massif_name_to_change_ratio_in_empirical_mean, + # label='Empirical' + label, negative_and_positive_values=False, graduation=0.5) visualizer.plot_abstract_fast(massif_name_to_value=visualizer.massif_name_to_change_ratio_in_model_mean, label='Model' + label, negative_and_positive_values=False, graduation=0.5) - visualizer.plot_abstract_fast( - massif_name_to_value=visualizer.massif_name_to_relative_difference_for_change_ratio_in_mean, - label='Relative difference of the model mean w.r.t. the empirical mean \n' - 'for the ' + label, graduation=5) + # visualizer.plot_abstract_fast( + # massif_name_to_value=visualizer.massif_name_to_relative_difference_for_change_ratio_in_mean, + # label='Relative difference of the model mean w.r.t. the empirical mean \n' + # 'for the ' + label, graduation=5) return list(visualizer.massif_name_to_relative_difference_for_change_ratio_in_mean.values()) -- GitLab