From ddefbb67755e07711229d429ce9d3c46ed5f8520 Mon Sep 17 00:00:00 2001 From: Le Roux Erwan <erwan.le-roux@irstea.fr> Date: Mon, 15 Jul 2019 14:07:49 +0200 Subject: [PATCH] [HYPERCUBE VISUALIZATION] improve trend repartition for poster by printing the optimal year. plot in higher resolution with text on the figure --- .../scm_models_data/abstract_study.py | 3 +- .../abstract_hypercube_visualizer.py | 2 +- .../altitude_hypercube_visualizer.py | 29 +++++++++++-------- .../main_starting_years.py | 24 +++++++++++---- 4 files changed, 39 insertions(+), 19 deletions(-) diff --git a/experiment/meteo_france_data/scm_models_data/abstract_study.py b/experiment/meteo_france_data/scm_models_data/abstract_study.py index 684c8ee4..4cf99e10 100644 --- a/experiment/meteo_france_data/scm_models_data/abstract_study.py +++ b/experiment/meteo_france_data/scm_models_data/abstract_study.py @@ -299,7 +299,8 @@ class AbstractStudy(object): x, y = list(row) massif_name = row.name value = massif_name_to_value[massif_name] - ax.text(x, y, str(round(value, 1))) + str_value = str(round(value, 1)) if isinstance(value, str) else str(value) + ax.text(x, y, str_value, horizontalalignment='center', verticalalignment='center', fontsize=7) if scaled: plt.axis('scaled') 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 a03e2740..abffff98 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 @@ -110,7 +110,7 @@ class AbstractHypercubeVisualizer(object): if not op.exists(dirname): os.makedirs(dirname, exist_ok=True) if tight: - plt.savefig(filepath, bbox_inches='tight', pad_inches=-0.03) + plt.savefig(filepath, bbox_inches='tight', pad_inches=-0.03, dpi=1000) else: plt.savefig(filepath) else: 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 3c39ac8d..54c55926 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 @@ -274,12 +274,12 @@ class AltitudeHypercubeVisualizer(AbstractHypercubeVisualizer): def visualize_trend_test_repartition_poster(self, reduction_function, axes=None, subtitle='', isin_parameters=None, plot_title=None): - ax = axes - i = 0 - trend_type_to_serie = {k: v[i].replace(0.0, np.nan) for k, v in + trend_type_to_serie = {k: v[0].replace(0.0, np.nan) for k, v in self.trend_type_to_series(reduction_function, isin_parameters).items()} massif_to_color = {} + add_text = self.nb_rows > 1 + massif_to_year = {} poster_trend_types = [AbstractUnivariateTest.SIGNIFICATIVE_POSITIVE_TREND, AbstractUnivariateTest.SIGNIFICATIVE_NEGATIVE_TREND, AbstractUnivariateTest.NON_SIGNIFICATIVE_TREND][:2] @@ -287,15 +287,18 @@ class AltitudeHypercubeVisualizer(AbstractHypercubeVisualizer): if display_trend_type in poster_trend_types: color = style[:1] serie = trend_type_to_serie[display_trend_type] - massif_to_value = dict(serie) - massif_to_color.update({k: color for k, v in massif_to_value.items() if not np.isnan(v)}) - - self.study.visualize_study(ax, massif_name_to_color=massif_to_color, show=False, - show_label=False, scaled=True) + massif_to_color_for_trend_type = {k: color for k, v in dict(serie).items() if not np.isnan(v)} + massif_to_color.update(massif_to_color_for_trend_type) + if add_text: + massif_to_year_for_trend_type = {k: int(v) for k, v in + self.trend_type_to_series(reduction_function, isin_parameters)[ + display_trend_type][1].items() + if k in massif_to_color_for_trend_type} + massif_to_year.update(massif_to_year_for_trend_type) + self.study.visualize_study(None, massif_name_to_color=massif_to_color, show=False, + show_label=False, scaled=True, add_text=add_text, + massif_name_to_value=massif_to_year) - # ax('scaled') - # if plot_title is not None: - # ax.set_title(plot_title) title = self.set_trend_test_reparition_title(subtitle, set=False) # row_title = self.get_title_plot(xlabel='massifs', ax_idx=i) @@ -306,7 +309,9 @@ class AltitudeHypercubeVisualizer(AbstractHypercubeVisualizer): def set_trend_test_reparition_title(self, subtitle, set=True): # Global information title = 'Repartition of {} trends'.format(subtitle) - title += ' at altitude={}m for the starting_year={}'.format(self.altitudes[0], self.starting_years[0]) + title += ' at altitude={}m for the starting_year={}'.format(self.altitudes[0], self.first_starting_year) + if len(self.starting_years) > 1: + title += ' until starting_year={}'.format(self.last_starting_year) if set: plt.suptitle(title) return title diff --git a/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/main_files_after_conf/main_starting_years.py b/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/main_files_after_conf/main_starting_years.py index 9a1a7811..2125580e 100644 --- a/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/main_files_after_conf/main_starting_years.py +++ b/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/main_files_after_conf/main_starting_years.py @@ -32,24 +32,38 @@ def get_fast_altitude_visualizer(altitude_hypercube_class): def main_fast_spatial_repartition(): # Simply the main graph - get_fast_altitude_visualizer(Altitude_Hypercube_Year_Visualizer).visualize_massif_trend_test() + get_fast_altitude_visualizer(Altitude_Hypercube_Year_Visualizer).visualize_massif_trend_test_one_altitude() -def get_full_altitude_visualizer(altitude_hypercube_class): - altitudes, first_starting_year, last_starting_year, nb_data_reduced_for_speed, only_first_one, save_to_file, trend_test_class = get_full_parameters(altitude=900) +def get_full_altitude_visualizer(altitude_hypercube_class, exact_starting_year=None, altitude=900): + altitudes, first_starting_year, last_starting_year, nb_data_reduced_for_speed, only_first_one, save_to_file, trend_test_class = get_full_parameters( + altitude=altitude) + if exact_starting_year is not None: + first_starting_year, last_starting_year = None, None study_classes = [CrocusRecentSwe] visualizer = load_altitude_visualizer(altitude_hypercube_class, altitudes, last_starting_year, nb_data_reduced_for_speed, only_first_one, save_to_file, study_classes, - trend_test_class, first_starting_year=first_starting_year) + trend_test_class, first_starting_year=first_starting_year, + exact_starting_year=exact_starting_year) return visualizer +FULL_ALTITUDES = [900, 1500, 2100, 2700] + + def main_full_spatial_repartition(): - get_full_altitude_visualizer(Altitude_Hypercube_Year_Visualizer).visualize_massif_trend_test() + for altitude in FULL_ALTITUDES[:]: + # Compute for the most likely starting year + vizualiser = get_full_altitude_visualizer(Altitude_Hypercube_Year_Visualizer, altitude=altitude) + vizualiser.visualize_massif_trend_test_one_altitude() + # Compute the trend for a linear trend + vizualiser = get_full_altitude_visualizer(Altitude_Hypercube_Year_Visualizer, altitude=altitude, exact_starting_year=1958) + vizualiser.visualize_massif_trend_test_one_altitude() def main_run(): main_full_spatial_repartition() + # main_fast_spatial_repartition() if __name__ == '__main__': -- GitLab