diff --git a/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/abstract_hypercube_visualizer.py b/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/abstract_hypercube_visualizer.py index 72c4479e5d9b32ca0219b5bc56673ced9792a195..4d65c31b328c5b2015eaf903b6d491a296807b4c 100644 --- a/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/abstract_hypercube_visualizer.py +++ b/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/abstract_hypercube_visualizer.py @@ -97,6 +97,7 @@ class AbstractHypercubeVisualizer(object): plt.savefig(filepath) else: plt.show() + plt.close() @property def study_visualizer(self) -> StudyVisualizer: diff --git a/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/altitude_hypercube_visualizer.py b/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/altitude_hypercube_visualizer.py index c4fbbaaf44da1cd573fc61a26a1568663dc95830..872431d2e1e9e1e50bc57647ab4769ef8ee9e440 100644 --- a/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/altitude_hypercube_visualizer.py +++ b/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/altitude_hypercube_visualizer.py @@ -147,6 +147,15 @@ class AltitudeHypercubeVisualizer(AbstractHypercubeVisualizer): axes = [axes] return axes + def load_trend_test_evolution_axes_with_columns(self, nb_rows, nb_columns): + fig, axes = plt.subplots(nb_rows, nb_columns, figsize=self.study_visualizer.figsize) + if not isinstance(axes, np.ndarray): + axes = [axes] + else: + axes = axes.reshape((nb_rows * nb_columns)) + return axes + + def visualize_trend_test_repartition(self, reduction_function, axes=None, subtitle='', isin_parameters=None, show_or_save_to_file=True, plot_title=None): if axes is None: @@ -205,12 +214,21 @@ class AltitudeHypercubeVisualizer(AbstractHypercubeVisualizer): # Take the mean with respect to all the first axis indices return df.mean(axis=0) - def visualize_year_trend_test(self, axes=None, marker='o', add_detailed_plots=False): + def visualize_year_trend_test(self, axes=None, marker='o', add_detailed_plots=False, plot_title=None, + isin_parameters=None, + show_or_save_to_file=True): for subtitle, reduction_function in self.subtitle_to_reduction_function(self.year_reduction, add_detailed_plot=add_detailed_plots).items(): - self.visualize_trend_test_evolution(reduction_function=reduction_function, xlabel=STARTING_YEARS_XLABEL, - xlabel_values=self.starting_years, axes=axes, marker=marker, - subtitle=subtitle) + last_result = self.visualize_trend_test_evolution(reduction_function=reduction_function, + xlabel=STARTING_YEARS_XLABEL, + xlabel_values=self.starting_years, axes=axes, + marker=marker, + subtitle=subtitle, + isin_parameters=isin_parameters, + show_or_save_to_file=show_or_save_to_file, + plot_title=plot_title + ) + return last_result @staticmethod def index_reduction(df, level): diff --git a/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/altitude_hypercube_visualizer_extended.py b/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/altitude_hypercube_visualizer_extended.py index 5e8d220207c30c20b2379d5571125c2b5a4cf572..c0ac2f7f4e4ebcff06df7b156c17a0a49eae57b2 100644 --- a/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/altitude_hypercube_visualizer_extended.py +++ b/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/altitude_hypercube_visualizer_extended.py @@ -23,10 +23,18 @@ class AltitudeHypercubeVisualizerExtended(AltitudeHypercubeVisualizer): df_bool = res.transpose() if transpose else res return df_bool - def _visualize_meta(self, visualization_function, loading_function, name_to_isin_parameters=None): + def _visualize_meta(self, visualization_function, loading_function, name_to_isin_parameters=None, + multiplication_factor_column=None): assert name_to_isin_parameters is not None, 'this method should not be called directly' - multiplication_factor = len(name_to_isin_parameters) - all_axes = loading_function(self.nb_rows * multiplication_factor) + + if multiplication_factor_column is None: + multiplication_factor_row = len(name_to_isin_parameters) + all_axes = loading_function(self.nb_rows * multiplication_factor_row) + multiplication_factor = multiplication_factor_row + else: + multiplication_factor_row = len(name_to_isin_parameters) // multiplication_factor_column + multiplication_factor = multiplication_factor_row * multiplication_factor_column + all_axes = loading_function(self.nb_rows * multiplication_factor_row, multiplication_factor_column) specific_title = '' for j, (name, isin_parameters) in enumerate(name_to_isin_parameters.items()): axes = all_axes[j::multiplication_factor] @@ -77,6 +85,24 @@ class AltitudeHypercubeVisualizerExtended(AltitudeHypercubeVisualizer): return {altitude_band_name: [(False, values, self.altitude_index_level)] for altitude_band_name, values in self.altitude_band_name_to_values.items()} + # Year trends + + @property + def massif_name_and_altitude_band_name_to_isin_parameters(self): + d = {} + for massif_name, isin_parameters1 in self.region_name_to_isin_parameters.items(): + for altitude_band_name, isin_parameters2 in self.altitude_band_name_to_isin_parameters.items(): + name = massif_name + ' ' + altitude_band_name + isin_parameters = isin_parameters1 + isin_parameters2 + d[name] = isin_parameters + return d + + def vsualize_year_trend_by_regions_and_altitudes(self): + return self._visualize_meta(visualization_function=self.visualize_year_trend_test, + loading_function=self.load_trend_test_evolution_axes_with_columns, + name_to_isin_parameters=self.massif_name_and_altitude_band_name_to_isin_parameters, + multiplication_factor_column=len(self.altitude_band_name_to_isin_parameters)) + diff --git a/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/main_hypercube_visualization.py b/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/main_hypercube_visualization.py index bc3ba3da48d5750fa1c709ded605e0dfb78bb9f4..90fad7b1ee9bb5663d1343c3b3ffb7b9feb8102b 100644 --- a/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/main_hypercube_visualization.py +++ b/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/main_hypercube_visualization.py @@ -99,13 +99,13 @@ def fast_altitude_year_hypercube(): def fast_altitude_year_hypercube_extended(): - save_to_file = False + save_to_file = True only_first_one = False nb_data_reduced_for_speed = True altitudes = [ALL_ALTITUDES[3], ALL_ALTITUDES[-7]] - for study_class in SCM_STUDIES[:1]: - for last_starting_year in [None, 1989, 1999][:1]: - for trend_test_class in [GevLocationChangePointTest, GevScaleChangePointTest, GevShapeChangePointTest][:1]: + for study_class in SCM_STUDIES[:2]: + for last_starting_year in [None, 1989, 1999][:2]: + for trend_test_class in [GevLocationChangePointTest, GevScaleChangePointTest, GevShapeChangePointTest][:2]: visualizers = [ StudyVisualizer(study, temporal_non_stationarity=True, verbose=False, multiprocessing=True) for study in study_iterator(study_class=study_class, only_first_one=only_first_one, @@ -116,10 +116,11 @@ def fast_altitude_year_hypercube_extended(): nb_data_reduced_for_speed=nb_data_reduced_for_speed, last_starting_year=last_starting_year) # visualizer.visualize_year_trend_test() + visualizer.vsualize_year_trend_by_regions_and_altitudes() # visualizer.visualize_altitude_trend_test() - visualizer.visualize_massif_trend_test_by_altitudes() # visualizer.visualize_massif_trend_test_by_altitudes() - # visualizer.visualize_altitute_trend_test_by_regions() + visualizer.visualize_massif_trend_test_by_altitudes() + visualizer.visualize_altitute_trend_test_by_regions() # visualizer.visualize_massif_trend_test() @@ -153,12 +154,12 @@ def full_altitude_year_hypercube_extended(): only_first_one = False nb_data_reduced_for_speed = False altitudes = ALL_ALTITUDES[3:-6] - for study_class in SCM_STUDIES[:1]: + for study_class in SCM_STUDIES[:]: for trend_test_class in [GevLocationChangePointTest, GevScaleChangePointTest, GevShapeChangePointTest][:1]: - years = [1967, 1977, 1987, 1997, 2007, None][-2:][::-1] + years = [1967, 1977, 1987, 1997, 2007, None][-4:][::-1] for last_starting_year in years: - for days in [1, 3]: + for days in [1, 3][1:]: visualizers = [ StudyVisualizer(study, temporal_non_stationarity=True, verbose=False, multiprocessing=True) for study in study_iterator(study_class=study_class, only_first_one=only_first_one, @@ -171,6 +172,8 @@ def full_altitude_year_hypercube_extended(): last_starting_year=last_starting_year, ) visualizer.visualize_altitute_trend_test_by_regions() + visualizer.visualize_massif_trend_test_by_altitudes() + visualizer.vsualize_year_trend_by_regions_and_altitudes() # visualizer.visualize_year_trend_test() # visualizer.visualize_massif_trend_test() # visualizer.visualize_altitude_trend_test() @@ -200,8 +203,9 @@ def main_run(): # fast_altitude_hypercube() # fast_altitude_year_hypercube() - fast_altitude_year_hypercube_extended() - # full_altitude_year_hypercube_extended() + # fast_altitude_year_hypercube_extended() + full_altitude_year_hypercube_extended() + # full_altitude_year_hypercube() # fast_quantity_altitude_hypercube() # full_quantity_altitude_hypercube()