From 545f413d4acb8f9726264ccd49e29eb050c85c05 Mon Sep 17 00:00:00 2001 From: Le Roux Erwan <erwan.le-roux@irstea.fr> Date: Wed, 12 Jun 2019 16:37:02 +0200 Subject: [PATCH] [HYPERCUBE] enable to run a quantity visualizer on the same graph by refactoring the code. --- .../altitude_hypercube_visualizer.py | 64 +++++++++++-------- .../altitude_hypercube_visualizer_extended.py | 8 +-- .../main_fast_hypercube.py | 8 ++- .../main_full_hypercube.py | 28 ++++---- 4 files changed, 61 insertions(+), 47 deletions(-) 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 91f579f5..8c1c41ae 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 @@ -94,12 +94,7 @@ class AltitudeHypercubeVisualizer(AbstractHypercubeVisualizer): def visualize_trend_test_evolution(self, reduction_function, xlabel, xlabel_values, axes=None, marker='o', subtitle='', isin_parameters=None, - show_or_save_to_file=True, plot_title=None): - if axes is None: - axes = self.load_trend_test_evolution_axes(self.nb_rows) - else: - assert len(axes) == self.nb_rows # Plot in one graph several graph that correspond to the same trend_type trend_type_to_series = self.trend_type_to_series(reduction_function, isin_parameters) @@ -171,9 +166,6 @@ class AltitudeHypercubeVisualizer(AbstractHypercubeVisualizer): # specific_title += 'all trend {}, all significative trends: {} (+:{} -{})'.format(*percents) plt.suptitle(specific_title) - if show_or_save_to_file: - self.show_or_save_to_file(specific_title=specific_title) - return specific_title def load_trend_test_evolution_axes(self, nb_rows): @@ -191,11 +183,7 @@ class AltitudeHypercubeVisualizer(AbstractHypercubeVisualizer): 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: - axes = self.load_axes_for_trend_test_repartition(self.nb_rows) - else: - assert len(axes) == self.nb_rows + plot_title=None): for i, axes_row in enumerate(axes): trend_type_to_serie = {k: v[i].replace(0.0, np.nan) for k, v in @@ -226,8 +214,6 @@ class AltitudeHypercubeVisualizer(AbstractHypercubeVisualizer): title += '\n ' + self.get_title_plot('massifs') plt.suptitle(title) - if show_or_save_to_file: - self.show_or_save_to_file(specific_title=title) return title def load_axes_for_trend_test_repartition(self, nb_rows): @@ -251,6 +237,12 @@ class AltitudeHypercubeVisualizer(AbstractHypercubeVisualizer): 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): + if axes is None: + axes = self.load_trend_test_evolution_axes(self.nb_rows) + else: + assert len(axes) == self.nb_rows + + last_result = '' for subtitle, reduction_function in self.subtitle_to_reduction_function(self.year_reduction, add_detailed_plot=add_detailed_plots).items(): last_result = self.visualize_trend_test_evolution(reduction_function=reduction_function, @@ -259,9 +251,10 @@ class AltitudeHypercubeVisualizer(AbstractHypercubeVisualizer): marker=marker, subtitle=subtitle, isin_parameters=isin_parameters, - show_or_save_to_file=show_or_save_to_file, plot_title=plot_title ) + if show_or_save_to_file: + self.show_or_save_to_file(specific_title=last_result) return last_result @staticmethod @@ -274,26 +267,41 @@ class AltitudeHypercubeVisualizer(AbstractHypercubeVisualizer): def visualize_altitude_trend_test(self, axes=None, marker='o', add_detailed_plots=False, plot_title=None, isin_parameters=None, show_or_save_to_file=True): + if axes is None: + axes = self.load_trend_test_evolution_axes(self.nb_rows) + else: + assert len(axes) == self.nb_rows + + last_title = '' for subtitle, reduction_function in self.subtitle_to_reduction_function(self.index_reduction, level=self.altitude_index_level, add_detailed_plot=add_detailed_plots).items(): - last_result = self.visualize_trend_test_evolution(reduction_function=reduction_function, - xlabel=ALTITUDES_XLABEL, - xlabel_values=self.altitudes, 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 + last_title = self.visualize_trend_test_evolution(reduction_function=reduction_function, + xlabel=ALTITUDES_XLABEL, + xlabel_values=self.altitudes, axes=axes, marker=marker, + subtitle=subtitle, isin_parameters=isin_parameters, + plot_title=plot_title) + if show_or_save_to_file: + self.show_or_save_to_file(specific_title=last_title) + return last_title def visualize_massif_trend_test(self, axes=None, add_detailed_plots=False, plot_title=None, isin_parameters=None, show_or_save_to_file=True): + + if axes is None: + axes = self.load_axes_for_trend_test_repartition(self.nb_rows) + else: + assert len(axes) == self.nb_rows + + last_title = '' for subtitle, reduction_function in self.subtitle_to_reduction_function(self.index_reduction, level=self.massif_index_level, add_detailed_plot=add_detailed_plots).items(): - last_result = self.visualize_trend_test_repartition(reduction_function, axes, subtitle=subtitle, - isin_parameters=isin_parameters, - plot_title=plot_title, - show_or_save_to_file=show_or_save_to_file) + last_title = self.visualize_trend_test_repartition(reduction_function, axes, subtitle=subtitle, + isin_parameters=isin_parameters, + plot_title=plot_title) + if show_or_save_to_file: + self.show_or_save_to_file(specific_title=last_title) - return last_result + return last_title 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 16c7247c..c0382caf 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 @@ -118,9 +118,6 @@ class AltitudeHypercubeVisualizerExtended(AltitudeHypercubeVisualizer): add_detailed_plot=add_detailed_plot) - - - class AltitudeHypercubeVisualizerWithoutTrendExtended(AltitudeHypercubeVisualizerExtended, AltitudeHypercubeVisualizerWithoutTrendType): @@ -128,12 +125,12 @@ class AltitudeHypercubeVisualizerWithoutTrendExtended(AltitudeHypercubeVisualize return self.isin_slicing(df=super().df_loglikelihood(), isin_parameters=isin_parameters) - # Extension class AltitudeHypercubeVisualizerBisExtended(AltitudeHypercubeVisualizerExtended, AltitudeHypercubeVisualizerBis): pass + class AltitudeYearHypercubeVisualizerExtended(AltitudeHypercubeVisualizerExtended, Altitude_Hypercube_Year_Visualizer): pass @@ -144,5 +141,6 @@ class QuantityHypercubeWithoutTrend(AltitudeHypercubeVisualizerWithoutTrendType, pass -class QuantityHypercubeWithoutTrendExtended(AltitudeHypercubeVisualizerWithoutTrendExtended, QuantityHypercubeWithoutTrend): +class QuantityHypercubeWithoutTrendExtended(AltitudeHypercubeVisualizerWithoutTrendExtended, + QuantityHypercubeWithoutTrend): pass diff --git a/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/main_fast_hypercube.py b/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/main_fast_hypercube.py index b91c497c..d93208c9 100644 --- a/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/main_fast_hypercube.py +++ b/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/main_fast_hypercube.py @@ -4,7 +4,7 @@ from experiment.meteo_france_data.scm_models_data.visualization.hypercube_visual AltitudeHypercubeVisualizer from experiment.meteo_france_data.scm_models_data.visualization.hypercube_visualization.altitude_hypercube_visualizer_extended import \ AltitudeHypercubeVisualizerBisExtended, QuantityHypercubeWithoutTrendExtended, \ - AltitudeHypercubeVisualizerWithoutTrendExtended + AltitudeHypercubeVisualizerWithoutTrendExtended, QuantityHypercubeWithoutTrend from experiment.meteo_france_data.scm_models_data.visualization.hypercube_visualization.quantity_altitude_visualizer import \ QuantityAltitudeHypercubeVisualizer from experiment.meteo_france_data.scm_models_data.visualization.hypercube_visualization.utils_hypercube import \ @@ -42,8 +42,10 @@ def get_fast_quantity_visualizer(quantity_hypercube_class): def main_mean_log_likelihood(): - get_fast_quantity_visualizer(QuantityHypercubeWithoutTrendExtended).vsualize_year_trend_by_regions_and_altitudes( - add_detailed_plot=True) + # Simply the main graph + get_fast_quantity_visualizer(QuantityHypercubeWithoutTrend).visualize_year_trend_test(add_detailed_plots=True) + # get_fast_quantity_visualizer(QuantityHypercubeWithoutTrendExtended).vsualize_year_trend_by_regions_and_altitudes( + # add_detailed_plot=True) # get_fast_altitude_visualizer(AltitudeHypercubeVisualizerWithoutTrendExtended).vsualize_year_trend_by_regions_and_altitudes() diff --git a/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/main_full_hypercube.py b/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/main_full_hypercube.py index 00684f7f..88160f9e 100644 --- a/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/main_full_hypercube.py +++ b/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/main_full_hypercube.py @@ -4,7 +4,7 @@ from experiment.meteo_france_data.scm_models_data.visualization.hypercube_visual AltitudeHypercubeVisualizer from experiment.meteo_france_data.scm_models_data.visualization.hypercube_visualization.altitude_hypercube_visualizer_extended import \ AltitudeHypercubeVisualizerBisExtended, QuantityHypercubeWithoutTrendExtended, \ - AltitudeHypercubeVisualizerWithoutTrendExtended + AltitudeHypercubeVisualizerWithoutTrendExtended, QuantityHypercubeWithoutTrend from experiment.meteo_france_data.scm_models_data.visualization.hypercube_visualization.quantity_altitude_visualizer import \ QuantityAltitudeHypercubeVisualizer from experiment.meteo_france_data.scm_models_data.visualization.hypercube_visualization.utils_hypercube import \ @@ -24,9 +24,8 @@ def get_full_parameters(): return altitudes, last_starting_year, nb_data_reduced_for_speed, only_first_one, save_to_file, trend_test_class -def get_full_altitude_visualizer(altitude_hypercube_class, exact_starting_year=None): +def get_full_altitude_visualizer(altitude_hypercube_class, study_classes, exact_starting_year=None): altitudes, last_starting_year, nb_data_reduced_for_speed, only_first_one, save_to_file, trend_test_class = get_full_parameters() - study_classes = SCM_STUDIES[:1] if exact_starting_year is not None: last_starting_year = None visualizer = load_altitude_visualizer(altitude_hypercube_class, altitudes, last_starting_year, @@ -45,21 +44,28 @@ def get_full_quantity_visualizer(quantity_hypercube_class): def main_mean_log_likelihood(): - get_full_quantity_visualizer(QuantityHypercubeWithoutTrendExtended).vsualize_year_trend_by_regions_and_altitudes( - add_detailed_plot=True) + # Main plot + get_full_quantity_visualizer(QuantityHypercubeWithoutTrend).visualize_year_trend_test(add_detailed_plots=True) + # Detailed plot + # get_full_quantity_visualizer(QuantityHypercubeWithoutTrendExtended).vsualize_year_trend_by_regions_and_altitudes( + # add_detailed_plot=True) + + # get_full_altitude_visualizer(AltitudeHypercubeVisualizerWithoutTrendExtended).vsualize_year_trend_by_regions_and_altitudes() def main_percentage_trend(): - visualizer = get_full_altitude_visualizer(AltitudeHypercubeVisualizerBisExtended, exact_starting_year=1981) - visualizer.vsualize_year_trend_by_regions_and_altitudes() - visualizer.visualize_massif_trend_test_by_altitudes() - visualizer.visualize_altitute_trend_test_by_regions() + for study_class in SCM_STUDIES: + study_classees = [study_class] + visualizer = get_full_altitude_visualizer(AltitudeHypercubeVisualizerBisExtended, exact_starting_year=1981, + study_classes=study_classees) + visualizer.visualize_massif_trend_test_by_altitudes() + visualizer.visualize_altitute_trend_test_by_regions() def main_run(): - # main_mean_log_likelihood() - main_percentage_trend() + main_mean_log_likelihood() + # main_percentage_trend() if __name__ == '__main__': -- GitLab