diff --git a/experiment/meteo_france_data/scm_models_data/visualization/study_visualization/study_visualizer.py b/experiment/meteo_france_data/scm_models_data/visualization/study_visualization/study_visualizer.py index 6891acfbba86a4dcf46fdc8e1196c4bd5654e1c3..df61a53190e7e70acb0c8dd1dba49568f37d4c27 100644 --- a/experiment/meteo_france_data/scm_models_data/visualization/study_visualization/study_visualizer.py +++ b/experiment/meteo_france_data/scm_models_data/visualization/study_visualization/study_visualizer.py @@ -6,6 +6,7 @@ from random import sample, seed from typing import Dict, Tuple import math + import matplotlib.pyplot as plt import numpy as np import pandas as pd @@ -819,7 +820,7 @@ class StudyVisualizer(VisualizationParameters): ax.set_aspect('equal') def show_or_save_to_file(self, add_classic_title=True, no_title=False, tight_layout=False, tight_pad=None, - dpi=None): + dpi=None, folder_for_variable=True): if tight_layout: if tight_pad is not None: plt.tight_layout(**tight_pad) @@ -839,7 +840,10 @@ class StudyVisualizer(VisualizationParameters): plt.show() if self.save_to_file: main_title, specific_title = '_'.join(self.study.title.split()).split('/') - filename = "{}/{}/".format(VERSION_TIME, main_title) + if folder_for_variable: + filename = "{}/{}/".format(VERSION_TIME, main_title) + else: + filename = "{}/".format(VERSION_TIME) if not self.only_one_graph: filename += "{}".format('_'.join(self.plot_name.split())) + '_' filename += specific_title diff --git a/papers/contrasting_snow_loads/main_result.py b/papers/contrasting_snow_loads/main_result.py index dba2c4387bedcd21b6f5d9eb53d9e009b5ef5287..d152057b8e7555acb3dfb35731b48ecdb7d75280 100644 --- a/papers/contrasting_snow_loads/main_result.py +++ b/papers/contrasting_snow_loads/main_result.py @@ -1,6 +1,9 @@ from multiprocessing.pool import Pool import matplotlib as mpl +mpl.use('Agg') +mpl.rcParams['text.usetex'] = True +mpl.rcParams['text.latex.preamble'] = [r'\usepackage{amsmath}'] from experiment.meteo_france_data.scm_models_data.crocus.crocus import CrocusSnowLoadTotal, CrocusSnowLoad3Days, \ CrocusSnowLoad5Days, CrocusSnowLoad7Days, CrocusSnowLoad1Day @@ -19,14 +22,14 @@ from papers.exceeding_snow_loads.result_trends_and_return_levels.plot_uncertaint plot_uncertainty_histogram from root_utils import NB_CORES -mpl.rcParams['text.usetex'] = True -mpl.rcParams['text.latex.preamble'] = [r'\usepackage{amsmath}'] + def intermediate_result(altitudes, massif_names=None, model_subsets_for_uncertainty=None, uncertainty_methods=None, study_class=CrocusSnowLoad3Days, - multiprocessing=False): + multiprocessing=False, + save_to_file=True): """ Plot all the trends for all altitudes And enable to plot uncertainty plot for some specific massif_names, uncertainty methods to be fast @@ -39,7 +42,7 @@ def intermediate_result(altitudes, massif_names=None, """ # Load altitude to visualizer altitude_to_visualizer = load_altitude_to_visualizer(altitudes, massif_names, model_subsets_for_uncertainty, - study_class, uncertainty_methods) + study_class, uncertainty_methods, save_to_file=save_to_file) # Load variable object efficiently for v in altitude_to_visualizer.values(): _ = v.study.year_to_variable_object @@ -62,7 +65,7 @@ def major_result(): massif_names = None model_subsets_for_uncertainty = None altitudes = paper_altitudes - altitudes = [900, 1200, 1500, 1800, 2100, 2400, 2700] + # altitudes = [600, 900, 1200, 1500, 1800, 2100, 2400, 2700, 3000, 3300] study_classes = [CrocusSnowLoad1Day, CrocusSnowLoad3Days, CrocusSnowLoad5Days, CrocusSnowLoad7Days][:] for study_class in study_classes: intermediate_result(altitudes, massif_names, model_subsets_for_uncertainty, @@ -74,4 +77,5 @@ if __name__ == '__main__': # intermediate_result(altitudes=[1500, 1800][:], massif_names=None, # uncertainty_methods=[ConfidenceIntervalMethodFromExtremes.my_bayes, # ConfidenceIntervalMethodFromExtremes.ci_mle][1:], - # multiprocessing=True) \ No newline at end of file + # multiprocessing=True, + # save_to_file=False) \ No newline at end of file diff --git a/papers/contrasting_snow_loads/plot_contrasting_trend_curves.py b/papers/contrasting_snow_loads/plot_contrasting_trend_curves.py index 616bb7289a2b32b5e872acad7c25701943594ab1..8d4b154ab32432515e23ef0d11e550f12fc70a5d 100644 --- a/papers/contrasting_snow_loads/plot_contrasting_trend_curves.py +++ b/papers/contrasting_snow_loads/plot_contrasting_trend_curves.py @@ -16,7 +16,8 @@ def plot_contrasting_trend_curves(altitude_to_visualizer: Dict[int, StudyVisuali visualizer = list(altitude_to_visualizer.values())[0] ax = create_adjusted_axes(1, 1) - ax_twinx = ax.twinx() + # ax_twinx = ax.twinx() + ax_twinx = ax ax_twiny = ax.twiny() trend_summary_values = list(zip(*[v.trend_summary_contrasting_values() for v in altitude_to_visualizer.values()])) @@ -60,19 +61,20 @@ def plot_contrasting_trend_curves(altitude_to_visualizer: Dict[int, StudyVisuali # axis.set_ylim(ax_lim) # axis.set_yticks(ax_ticks) # axis.tick_params(labelsize=labelsize) - ax.yaxis.grid() + ax_twinx.yaxis.grid() - label_curve = (visualizer.label).replace('change', 'decrease') - ax_twinx.set_ylabel(label_curve.replace('', ''), fontsize=legend_fontsize) - for region_name, mean_change in zip(AbstractExtendedStudy.region_names, mean_changes): - if len(mean_changes) > 1: + ax_twinx.set_ylabel(visualizer.label, fontsize=legend_fontsize) + for j, (region_name, mean_change) in enumerate(zip(AbstractExtendedStudy.region_names, mean_changes)): + if len(mean_changes) > 2: label = region_name + elif len(mean_changes) == 2: + label = 'North' if j == 0 else 'South' else: label = 'Mean relative change' ax_twinx.plot(altitudes, mean_change, label=label, linewidth=linewidth, marker='o') ax_twinx.legend(loc='upper right', prop={'size': size}) # Save plot - visualizer.plot_name = 'Trend curves' - visualizer.show_or_save_to_file(no_title=True, dpi=dpi_paper1_figure) + visualizer.plot_name = 'Trend curves for' + visualizer.study.variable_name.split('(')[0] + visualizer.show_or_save_to_file(no_title=True, dpi=dpi_paper1_figure, folder_for_variable=False) plt.close() diff --git a/papers/exceeding_snow_loads/study_visualizer_for_non_stationary_trends.py b/papers/exceeding_snow_loads/study_visualizer_for_non_stationary_trends.py index a7f3e056da4c042b1b4effe953e985015ab3ca84..52af41d3a0a172a44d48d8aa9701e3e8413b21bb 100644 --- a/papers/exceeding_snow_loads/study_visualizer_for_non_stationary_trends.py +++ b/papers/exceeding_snow_loads/study_visualizer_for_non_stationary_trends.py @@ -436,12 +436,21 @@ class StudyVisualizerForNonStationaryTrends(StudyVisualizer): # percentage_decrease = 100 * len(decreasing_trend_tests) / len(trend_tests) # significative_decrease_trend_tests = [t for t in decreasing_trend_tests if t.is_significant] # percentage_decrease_significative = 100 * len(significative_decrease_trend_tests) / len(trend_tests) - compute_mean_change = lambda l: np.mean(np.array(list(l))) - mean_changes = [compute_mean_change(self.massif_name_to_relative_change_value.values())] - # Compute mean relatives per regions (for the moment i don't add the region means) + compute_mean_change = lambda l: np.mean(np.array(list(l))) if len(l) > 0 else 0 + all_regions = False massif_name_to_region_name = AbstractExtendedStudy.massif_name_to_region_name - for region_name in AbstractExtendedStudy.real_region_names: - change_values = [v for m, v in self.massif_name_to_relative_change_value.items() - if massif_name_to_region_name[m] == region_name] - mean_changes.append(compute_mean_change(change_values)) + if all_regions: + mean_changes = [compute_mean_change(self.massif_name_to_relative_change_value.values())] + # Compute mean relatives per regions (for the moment i don't add the region means) + for region_name in AbstractExtendedStudy.real_region_names: + change_values = [v for m, v in self.massif_name_to_relative_change_value.items() + if massif_name_to_region_name[m] == region_name] + mean_changes.append(compute_mean_change(change_values)) + else: + mean_changes = [ + compute_mean_change([v for m, v in self.massif_name_to_relative_change_value.items() + if massif_name_to_region_name[m] in regions]) + for regions in [AbstractExtendedStudy.real_region_names[:2], AbstractExtendedStudy.real_region_names[2:]] + ] + return (self.altitude, *mean_changes)