diff --git a/extreme_data/meteo_france_data/scm_models_data/visualization/create_shifted_cmap.py b/extreme_data/meteo_france_data/scm_models_data/visualization/create_shifted_cmap.py index 662212c08cc1a0cf52a8506ebeefb02d05c274fd..2c4068f30cf5ecebe31974e40243c7f456951edd 100644 --- a/extreme_data/meteo_france_data/scm_models_data/visualization/create_shifted_cmap.py +++ b/extreme_data/meteo_france_data/scm_models_data/visualization/create_shifted_cmap.py @@ -77,6 +77,7 @@ def imshow_shifted(ax, param_name, values, visualization_extend, mask_2D=None): def ticks_values_and_labels_for_percentages(graduation, max_abs_change): + assert max_abs_change != np.inf positive_ticks = [] tick = graduation while tick < max_abs_change: @@ -86,7 +87,9 @@ def ticks_values_and_labels_for_percentages(graduation, max_abs_change): ticks_values = [((t / max_abs_change) + 1) / 2 for t in all_ticks_labels] return ticks_values, all_ticks_labels + def ticks_values_and_labels_for_positive_value(graduation, max_abs_change): + assert max_abs_change != np.inf positive_ticks = [] tick = 0 while tick < max_abs_change: diff --git a/extreme_trend/abstract_gev_trend_test.py b/extreme_trend/abstract_gev_trend_test.py index 46224e060436a944e7400c618d81a091972c886c..b7e5d16cce3dfd82fb0a8425fa2ebbfddc471087 100644 --- a/extreme_trend/abstract_gev_trend_test.py +++ b/extreme_trend/abstract_gev_trend_test.py @@ -139,10 +139,12 @@ class AbstractGevTrendTest(object): AbstractCoordinates.COORDINATE_T) @cached_property - def unconstrained_estimator_gev_params(self) -> GevParams: - # Constant parameters correspond to the gev params in 1958 - return self.unconstrained_estimator.function_from_fit.get_params(coordinate=np.array([1958]), - is_transformed=False) + def unconstrained_estimator_gev_params_last_year(self) -> GevParams: + return self.get_unconstrained_gev_params(year=self.years[-1]) + + @cached_property + def unconstrained_estimator_gev_params_first_year(self) -> GevParams: + return self.get_unconstrained_gev_params(year=self.years[0]) def time_derivative_times_years(self, nb_years): # Compute the slope strength @@ -186,7 +188,7 @@ class AbstractGevTrendTest(object): @property def test_trend_constant_quantile(self): - return self.unconstrained_estimator_gev_params.quantile(p=self.quantile_level) + return self.unconstrained_estimator_gev_params_last_year.quantile(p=self.quantile_level) # Some class properties for display purpose @@ -471,7 +473,8 @@ class AbstractGevTrendTest(object): def unconstrained_average_mean_value(self, year_min, year_max) -> float: mean_values = [] for year in range(year_min, year_max + 1): - mean = self.get_unconstrained_gev_params(year).mean + gev_params = self.get_unconstrained_gev_params(year) + mean = gev_params.mean mean_values.append(mean) average_mean_value = np.mean(mean_values) assert isinstance(average_mean_value, float) diff --git a/extreme_trend/trend_test_one_parameter/gev_trend_test_one_parameter.py b/extreme_trend/trend_test_one_parameter/gev_trend_test_one_parameter.py index e0f942a18800346c9b742e072bbc20c8ca04a16c..49474239ea96ba960edab4f8f05cef6285049517 100644 --- a/extreme_trend/trend_test_one_parameter/gev_trend_test_one_parameter.py +++ b/extreme_trend/trend_test_one_parameter/gev_trend_test_one_parameter.py @@ -73,12 +73,12 @@ class GevLocationTrendTest(GevTrendTestOneParameterAgainstStationary): fit_method=fit_method) def _slope_strength(self): - return self.unconstrained_estimator_gev_params.time_derivative_of_return_level(p=self.quantile_level, - mu1=self.non_stationary_linear_coef) + return self.unconstrained_estimator_gev_params_last_year.time_derivative_of_return_level(p=self.quantile_level, + mu1=self.non_stationary_linear_coef) @property def mean_difference_same_sign_as_slope_strenght(self) -> bool: - zeta0 = self.unconstrained_estimator_gev_params.shape + zeta0 = self.unconstrained_estimator_gev_params_last_year.shape mean_difference = self.mean_difference(zeta0=zeta0, mu1=self.non_stationary_linear_coef) return self.same_sign(mean_difference, self._slope_strength()) @@ -100,13 +100,13 @@ class GevScaleTrendTest(GevTrendTestOneParameterAgainstStationary): fit_method=fit_method) def _slope_strength(self): - return self.unconstrained_estimator_gev_params.time_derivative_of_return_level( + return self.unconstrained_estimator_gev_params_last_year.time_derivative_of_return_level( p=self.quantile_level, sigma1=self.non_stationary_linear_coef) @property def mean_difference_same_sign_as_slope_strenght(self) -> bool: - zeta0 = self.unconstrained_estimator_gev_params.shape + zeta0 = self.unconstrained_estimator_gev_params_last_year.shape mean_difference = self.mean_difference(zeta0=zeta0, sigma1=self.non_stationary_linear_coef) return self.same_sign(mean_difference, self._slope_strength()) diff --git a/extreme_trend/trend_test_one_parameter/gumbel_trend_test_one_parameter.py b/extreme_trend/trend_test_one_parameter/gumbel_trend_test_one_parameter.py index 79e8f4947a70d570da7467152440dae5af586d14..b9a066062694f56c4813897137a07c6fa4ed1fc2 100644 --- a/extreme_trend/trend_test_one_parameter/gumbel_trend_test_one_parameter.py +++ b/extreme_trend/trend_test_one_parameter/gumbel_trend_test_one_parameter.py @@ -79,8 +79,8 @@ class GumbelLocationTrendTest(GevTrendTestOneParameterAgainstStationary): return 3 def _slope_strength(self): - return self.unconstrained_estimator_gev_params.time_derivative_of_return_level(p=self.quantile_level, - mu1=self.non_stationary_linear_coef) + return self.unconstrained_estimator_gev_params_last_year.time_derivative_of_return_level(p=self.quantile_level, + mu1=self.non_stationary_linear_coef) @classproperty def label(self): @@ -103,7 +103,7 @@ class GumbelScaleTrendTest(GevTrendTestOneParameterAgainstStationary): fit_method=fit_method) def _slope_strength(self): - return self.unconstrained_estimator_gev_params.time_derivative_of_return_level( + return self.unconstrained_estimator_gev_params_last_year.time_derivative_of_return_level( p=self.quantile_level, sigma1=self.non_stationary_linear_coef) diff --git a/extreme_trend/trend_test_three_parameters/gev_trend_test_three_parameters.py b/extreme_trend/trend_test_three_parameters/gev_trend_test_three_parameters.py index dc411f3a0e68dec565f13a5b7db8ff333916edc3..04d780b076163fb7bb2c246f5d99a2a87315a905 100644 --- a/extreme_trend/trend_test_three_parameters/gev_trend_test_three_parameters.py +++ b/extreme_trend/trend_test_three_parameters/gev_trend_test_three_parameters.py @@ -50,9 +50,9 @@ class GevLocationAndScaleTrendTestAgainstGumbel(GevTrendTestThreeParameters): return self.get_non_stationary_linear_coef(param_name=GevParams.SCALE) def _slope_strength(self): - return self.unconstrained_estimator_gev_params.time_derivative_of_return_level(p=self.quantile_level, - mu1=self.mu1, - sigma1=self.sigma1) + return self.unconstrained_estimator_gev_params_last_year.time_derivative_of_return_level(p=self.quantile_level, + mu1=self.mu1, + sigma1=self.sigma1) @classproperty def label(self): diff --git a/extreme_trend/trend_test_two_parameters/gev_trend_test_two_parameters.py b/extreme_trend/trend_test_two_parameters/gev_trend_test_two_parameters.py index 7830fb4cf19bf3a8e77881b86e25fae68edcf8fd..a7f49d72577afb1f441a542ce096f32ad9cc9cd5 100644 --- a/extreme_trend/trend_test_two_parameters/gev_trend_test_two_parameters.py +++ b/extreme_trend/trend_test_two_parameters/gev_trend_test_two_parameters.py @@ -66,13 +66,13 @@ class GevLocationAndScaleTrendTest(GevTrendTestTwoParametersAgainstGev): return self.get_non_stationary_linear_coef(param_name=GevParams.SCALE) def _slope_strength(self): - return self.unconstrained_estimator_gev_params.time_derivative_of_return_level(p=self.quantile_level, - mu1=self.mu1, - sigma1=self.sigma1) + return self.unconstrained_estimator_gev_params_last_year.time_derivative_of_return_level(p=self.quantile_level, + mu1=self.mu1, + sigma1=self.sigma1) @property def mean_difference_same_sign_as_slope_strenght(self) -> bool: - zeta0 = self.unconstrained_estimator_gev_params.shape + zeta0 = self.unconstrained_estimator_gev_params_last_year.shape mean_difference = self.mean_difference(zeta0=zeta0, mu1=self.mu1, sigma1=self.sigma1) return self.same_sign(mean_difference, self._slope_strength()) diff --git a/extreme_trend/trend_test_two_parameters/gumbel_test_two_parameters.py b/extreme_trend/trend_test_two_parameters/gumbel_test_two_parameters.py index db57fb579102a4133d60d0e48b4128fa88ccba61..426e593d45edcb4ce16a47472a5cee6d7669841e 100644 --- a/extreme_trend/trend_test_two_parameters/gumbel_test_two_parameters.py +++ b/extreme_trend/trend_test_two_parameters/gumbel_test_two_parameters.py @@ -31,9 +31,9 @@ class GumbelLocationAndScaleTrendTest(GevTrendTestTwoParameters): return self.get_non_stationary_linear_coef(param_name=GevParams.SCALE) def _slope_strength(self): - return self.unconstrained_estimator_gev_params.time_derivative_of_return_level(p=self.quantile_level, - mu1=self.mu1, - sigma1=self.sigma1) + return self.unconstrained_estimator_gev_params_last_year.time_derivative_of_return_level(p=self.quantile_level, + mu1=self.mu1, + sigma1=self.sigma1) @classproperty def label(self): return super().label % '\\mu_1, \\sigma_1' diff --git a/extreme_trend/visualizers/study_visualizer_for_non_stationary_trends.py b/extreme_trend/visualizers/study_visualizer_for_non_stationary_trends.py index 1376bb39104e9c447a39b335eb503035f3e221b3..c426001f444d8e119517f96cc7e10a7e7e38a4f8 100644 --- a/extreme_trend/visualizers/study_visualizer_for_non_stationary_trends.py +++ b/extreme_trend/visualizers/study_visualizer_for_non_stationary_trends.py @@ -169,7 +169,8 @@ class StudyVisualizerForNonStationaryTrends(StudyVisualizer): if self.select_only_acceptable_shape_parameter: acceptable_shape_parameter = lambda s: -0.5 <= s <= 0.5 # physically acceptable prior all_trend_test = [t for t in all_trend_test - if acceptable_shape_parameter(t.unconstrained_estimator_gev_params.shape)] + if (acceptable_shape_parameter(t.unconstrained_estimator_gev_params_last_year.shape) + and acceptable_shape_parameter(t.unconstrained_estimator_gev_params_first_year.shape))] sorted_trend_test = sorted(all_trend_test, key=lambda t: t.aic) # Extract the stationary or non-stationary model that minimized AIC @@ -424,14 +425,14 @@ class StudyVisualizerForNonStationaryTrends(StudyVisualizer): psnow = self.massif_name_to_psnow[massif_name] trend_test = self.massif_name_to_trend_test_that_minimized_aic[massif_name] trend_test.intensity_plot_wrt_standard_gumbel_simple(massif_name, self.altitude, color, psnow) - self.plot_name = 'intensity_plot_{}_{}_{}_{}'.format(self.altitude, massif_name, psnow, trend_test.unconstrained_estimator_gev_params.shape) + self.plot_name = 'intensity_plot_{}_{}_{}_{}'.format(self.altitude, massif_name, psnow, trend_test.unconstrained_estimator_gev_params_last_year.shape) self.show_or_save_to_file(add_classic_title=False, no_title=True) plt.close() def qqplot(self, massif_name, color=None): trend_test = self.massif_name_to_trend_test_that_minimized_aic[massif_name] trend_test.qqplot_wrt_standard_gumbel(massif_name, self.altitude) - self.plot_name = 'qpplot_plot_{}_{}_{}'.format(self.altitude, massif_name, trend_test.unconstrained_estimator_gev_params.shape) + self.plot_name = 'qpplot_plot_{}_{}_{}'.format(self.altitude, massif_name, trend_test.unconstrained_estimator_gev_params_last_year.shape) self.show_or_save_to_file(add_classic_title=False, no_title=True) plt.close() diff --git a/extreme_trend/visualizers/study_visualizer_for_shape_repartition.py b/extreme_trend/visualizers/study_visualizer_for_shape_repartition.py index 392cedd2ca087d2ee56e7ac10cae441edf95bd09..901754e8e7ec919aec5fec866f9a180db286f832 100644 --- a/extreme_trend/visualizers/study_visualizer_for_shape_repartition.py +++ b/extreme_trend/visualizers/study_visualizer_for_shape_repartition.py @@ -14,7 +14,7 @@ class StudyVisualizerForShape(StudyVisualizerForNonStationaryTrends): @cached_property def massif_name_to_unconstrained_shape_parameter(self): - return {m: t.unconstrained_estimator_gev_params.shape + return {m: t.unconstrained_estimator_gev_params_last_year.shape for m, t in self.massif_name_to_trend_test_that_minimized_aic.items()} @cached_property 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 4438841cb3519ad6b6ddddc045e4b2ed3b70ed3a..2fe80931b12ce361dd03caaa3d3d0b327bd63390 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 @@ -88,13 +88,14 @@ def major_result(): model_subsets_for_uncertainty = None altitudes = paper_altitudes # altitudes = [300, 600, 900, 1200, 1500, 1800, 2100, 2400, 2700, 3000, 3300, 3600, 3900] - altitudes = [900, 1200, 1500, 1800] - # draft_altitudes = [900, 1200, 1500, 1800, 2100, 2400, 2700, 3000] + # altitudes = [900, 1200, 1500, 1800][:2] + # altitudes = [2400, 2700][:2] + altitudes = [900, 1200, 1500, 1800, 2100, 2400, 2700, 3000] # altitudes = draft_altitudes for study_class in study_classes: intermediate_result(altitudes, massif_names, model_subsets_for_uncertainty, - uncertainty_methods, study_class) + uncertainty_methods, study_class, multiprocessing=True) if __name__ == '__main__': diff --git a/projects/contrasting_trends_in_snow_loads/article2_snowfall_versus_time_and_altitude/study_visualizer_for_mean_values.py b/projects/contrasting_trends_in_snow_loads/article2_snowfall_versus_time_and_altitude/study_visualizer_for_mean_values.py index 351a50c283ace71185fcc284ee1f7d00c26eb4a1..a074aad7b779344cddfb93492f5d0b9fc988a2f6 100644 --- a/projects/contrasting_trends_in_snow_loads/article2_snowfall_versus_time_and_altitude/study_visualizer_for_mean_values.py +++ b/projects/contrasting_trends_in_snow_loads/article2_snowfall_versus_time_and_altitude/study_visualizer_for_mean_values.py @@ -77,19 +77,18 @@ class StudyVisualizerForMeanValues(StudyVisualizerForNonStationaryTrends): return massif_name_to_empirical_value @cached_property - def massif_name_to_model_mean(self): - massif_name_to_model_value = {} + def massif_name_to_model_mean_last_year(self): + massif_name_to_model_value_last_year = {} for massif_name, trend_test in self.massif_name_to_trend_test_that_minimized_aic.items(): - parameter_value = trend_test.unconstrained_average_mean_value(self.study.year_min, self.study.year_max) - massif_name_to_model_value[massif_name] = parameter_value - return massif_name_to_model_value + massif_name_to_model_value_last_year[massif_name] = trend_test.unconstrained_estimator_gev_params_last_year.mean + return massif_name_to_model_value_last_year @cached_property def massif_name_to_relative_difference_for_mean(self): massif_name_to_relative_difference = {} for massif_name in self.massif_name_to_trend_test_that_minimized_aic.keys(): e = self.massif_name_to_empirical_mean[massif_name] - m = self.massif_name_to_model_mean[massif_name] + m = self.massif_name_to_model_mean_last_year[massif_name] relative_diference = 100 * (m - e) / e massif_name_to_relative_difference[massif_name] = relative_diference return massif_name_to_relative_difference 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 053570e21409e5b6393b11b4fb55a215ef38d9d4..354de6fe95cfe7ac799b3b18065aaa87a97d171f 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 @@ -1,3 +1,4 @@ +from multiprocessing import Pool from typing import Dict import matplotlib.pyplot as plt @@ -8,25 +9,27 @@ from projects.contrasting_trends_in_snow_loads.article2_snowfall_versus_time_and StudyVisualizerForMeanValues from projects.ogorman.gorman_figures.figure1.study_visualizer_for_double_stationary_fit import \ StudyVisualizerForReturnLevelChange +from root_utils import NB_CORES def validation_plot(altitude_to_visualizer: Dict[int, StudyVisualizerForMeanValues], order_derivative=0): # Plot the mean empirical, the mean parametric and the relative difference between the two altitudes = list(altitude_to_visualizer.keys()) study_visualizer = list(altitude_to_visualizer.values())[0] - altitude_to_relative_differences = {} + visualizers = list(altitude_to_visualizer.values()) if order_derivative == 0: plot_function = plot_relative_difference_map_order_zero else: plot_function = plot_relative_difference_map_order_one # Plot map for the repartition of the difference + altitude_to_relative_differences = {} for altitude, visualizer in altitude_to_visualizer.items(): altitude_to_relative_differences[altitude] = plot_function(visualizer) - study_visualizer.show_or_save_to_file(add_classic_title=False, dpi=500) + # study_visualizer.show_or_save_to_file(add_classic_title=False, dpi=500) # # Shoe plot with respect to the altitude. # plot_shoe_relative_differences_distribution(altitude_to_relative_differences, altitudes, study_visualizer, # order_derivative) - study_visualizer.show_or_save_to_file(add_classic_title=False, dpi=500) + # study_visualizer.show_or_save_to_file(add_classic_title=False, dpi=500) plt.close() @@ -53,11 +56,12 @@ def plot_relative_difference_map_order_zero(visualizer: StudyVisualizerForMeanVa label = ' 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_empirical_mean, # label='Empirical' + label, negative_and_positive_values=False) - visualizer.plot_abstract_fast(massif_name_to_value=visualizer.massif_name_to_model_mean, + visualizer.plot_abstract_fast(massif_name_to_value=visualizer.massif_name_to_model_mean_last_year, label='Model' + label, negative_and_positive_values=False, add_text=True) # visualizer.plot_abstract_fast(massif_name_to_value=visualizer.massif_name_to_relative_difference_for_mean, # label='Relative difference of the model mean w.r.t. the empirical mean \n' # 'for the ' + label, graduation=1) + visualizer.show_or_save_to_file(add_classic_title=False, dpi=500) return list(visualizer.massif_name_to_relative_difference_for_mean.values()) diff --git a/projects/exceeding_snow_loads/checks/qqplot/main_qqplot_for_big_shapes.py b/projects/exceeding_snow_loads/checks/qqplot/main_qqplot_for_big_shapes.py index d39214fb460650861407913eb362e816717ecd13..459b93ebc1ed86bba8466188003de0435b694538 100644 --- a/projects/exceeding_snow_loads/checks/qqplot/main_qqplot_for_big_shapes.py +++ b/projects/exceeding_snow_loads/checks/qqplot/main_qqplot_for_big_shapes.py @@ -23,7 +23,7 @@ def get_tuple_ordered_by_shape(fast=False): # Extract all the values l = [] for a, v in altitude_to_visualizer.items(): - l.extend([(a, v, m, t.unconstrained_estimator_gev_params.shape) for m, t in + l.extend([(a, v, m, t.unconstrained_estimator_gev_params_last_year.shape) for m, t in v.massif_name_to_trend_test_that_minimized_aic.items()]) # Sort them and keep the highest examples l = sorted(l, key=lambda t: t[-1]) diff --git a/projects/exceeding_snow_loads/checks/without_maximum/study_visualizer_for_fit_witout_maximum.py b/projects/exceeding_snow_loads/checks/without_maximum/study_visualizer_for_fit_witout_maximum.py index 31d9d5eba25126afa3cc0ac1829a0ab8cc7b763a..c33fb52e6f5d6f04b621acdb914ba6bdac353b60 100644 --- a/projects/exceeding_snow_loads/checks/without_maximum/study_visualizer_for_fit_witout_maximum.py +++ b/projects/exceeding_snow_loads/checks/without_maximum/study_visualizer_for_fit_witout_maximum.py @@ -40,7 +40,7 @@ class StudyVisualizerForFitWithoutMaximum(StudyVisualizerForNonStationaryTrends) for massif_name, maximum in self.massif_name_to_maximum.items(): t = self.massif_name_to_trend_test_that_minimized_aic[massif_name] msg = '{} {}m'.format(massif_name, self.study.altitude) - upper_bound = t.unconstrained_estimator_gev_params.density_upper_bound + upper_bound = t.unconstrained_estimator_gev_params_last_year.density_upper_bound if not np.isinf(upper_bound): diff.append(upper_bound - maximum) assert maximum <= upper_bound, msg diff --git a/projects/exceeding_snow_loads/section_results/plot_selection_curves.py b/projects/exceeding_snow_loads/section_results/plot_selection_curves.py index fde43a425ea11db9bead800bb4748ef87e0be13a..b31ed8952779ec957665b13f7c54b8fd1bbb13d4 100644 --- a/projects/exceeding_snow_loads/section_results/plot_selection_curves.py +++ b/projects/exceeding_snow_loads/section_results/plot_selection_curves.py @@ -2,7 +2,7 @@ from typing import Dict import matplotlib.pyplot as plt from extreme_data.meteo_france_data.scm_models_data.visualization.utils import create_adjusted_axes -from projects.exceeding_snow_loads.utils import dpi_paper1_figure +from projects.exceeding_snow_loads.utils import dpi_paper1_figure, get_trend_test_name from extreme_trend.visualizers.study_visualizer_for_non_stationary_trends import StudyVisualizerForNonStationaryTrends @@ -10,7 +10,8 @@ def permute(l, permutation): # permutation = [i//2 if i % 2 == 0 else 4 + i //2 for i in range(8)] return [l[i] for i in permutation] -def plot_selection_curves(altitude_to_visualizer: Dict[int, StudyVisualizerForNonStationaryTrends]): +def plot_selection_curves(altitude_to_visualizer: Dict[int, StudyVisualizerForNonStationaryTrends], + paper1=True): """ Plot a single trend curves :return: @@ -20,8 +21,7 @@ def plot_selection_curves(altitude_to_visualizer: Dict[int, StudyVisualizerForNo ax = create_adjusted_axes(1, 1) selected_counter = merge_counter([v.selected_trend_test_class_counter for v in altitude_to_visualizer.values()]) - # selected_and_significative_counter = merge_counter([v.selected_and_significative_trend_test_class_counter for v in altitude_to_visualizer.values()]) - selected_and_significative_counter = merge_counter([v.selected_and_anderson_goodness_of_fit_trend_test_class_counter for v in altitude_to_visualizer.values()]) + selected_and_significative_counter = merge_counter([v.selected_and_significative_trend_test_class_counter for v in altitude_to_visualizer.values()]) # selected_and_significative_counter = merge_counter([v.selected_and_kstest_goodness_of_fit_trend_test_class_counter for v in altitude_to_visualizer.values()]) total_of_selected_models = sum(selected_counter.values()) l = sorted(enumerate(visualizer.non_stationary_trend_test), key=lambda e: selected_counter[e[1]]) @@ -29,7 +29,11 @@ def plot_selection_curves(altitude_to_visualizer: Dict[int, StudyVisualizerForNo select_list = get_ordered_list_from_counter(selected_counter, total_of_selected_models, visualizer, permutation) selected_and_signifcative_list = get_ordered_list_from_counter(selected_and_significative_counter, total_of_selected_models, visualizer, permutation) - labels = permute(['${}$'.format(t.label) for t in visualizer.non_stationary_trend_test], permutation) + if paper1: + labels = ['${}$'.format(t.label) for t in visualizer.non_stationary_trend_test] + else: + labels = [get_trend_test_name(t) for t in visualizer.non_stationary_trend_test] + labels = permute(labels, permutation) print(l) print(sum(select_list), select_list) @@ -42,7 +46,10 @@ def plot_selection_curves(altitude_to_visualizer: Dict[int, StudyVisualizerForNo width = 5 size = 30 legend_fontsize = 30 - labelsize = 25 + if paper1: + labelsize = 25 + else: + labelsize = 15 linewidth = 3 x = [10 * (i+1) for i in range(len(select_list))] ax.bar(x, select_list, width=width, color='grey', edgecolor='grey', label='Non significant model', @@ -95,8 +102,18 @@ def plot_selection_curves(altitude_to_visualizer: Dict[int, StudyVisualizerForNo # ax_twinx.plot(altitudes, mean_decrease, label=label, linewidth=linewidth, marker='o') # ax_twinx.legend(loc='upper right', prop={'size': size}) + # Compute the ratio of plots that pass the goodness of fit test + if paper1: + ratio = '100' + else: + nb_selected_total = 0 + nb_selected_total_and_goodness_of_fit = 0 + for v in altitude_to_visualizer.values(): + nb_selected_total += len(v.super_massif_name_to_trend_test_that_minimized_aic) + nb_selected_total_and_goodness_of_fit += len(v.massif_name_to_trend_test_that_minimized_aic) + ratio = 100 * nb_selected_total_and_goodness_of_fit / nb_selected_total # Save plot - visualizer.plot_name = 'Selection curves' + visualizer.plot_name = 'Selection curves ({}% of selected models were kept)'.format(ratio) visualizer.show_or_save_to_file(no_title=True, dpi=dpi_paper1_figure) plt.close()