diff --git a/extreme_data/meteo_france_data/scm_models_data/abstract_study.py b/extreme_data/meteo_france_data/scm_models_data/abstract_study.py index 7547907e63af5fb8be71fb1eed345194f1146296..1436a90894a31f298ed41b5bd91442a5ac20f20c 100644 --- a/extreme_data/meteo_france_data/scm_models_data/abstract_study.py +++ b/extreme_data/meteo_france_data/scm_models_data/abstract_study.py @@ -505,6 +505,8 @@ class AbstractStudy(object): # Lower a bit the Maurienne massif # df.loc['Mercantour', 'coord_x'] += 14000 # shift to the right df.loc['Maurienne', 'coord_y'] -= 6000 # shift down + df.loc['Maurienne', 'coord_y'] -= 5000 # shift down + df.loc['Maurienne', 'coord_x'] += 3000 # shift down df.loc['Vanoise', 'coord_y'] -= 4000 # shift down df.loc['Ubaye', 'coord_y'] -= 4000 # shift down # Filter, keep massifs present at the altitude of interest @@ -566,8 +568,6 @@ class AbstractStudy(object): massif_name = cls.coordinate_id_to_massif_name[coordinate_id] if massif_name_to_marker_style is not None and massif_name in massif_name_to_marker_style: massif_coordinate = masssif_coordinate_for_display.df_all_coordinates.loc[massif_name, :].values - if massif_name in ['Maurienne', 'Mercantour']: - massif_coordinate[1] -= 5000 ax.plot(massif_coordinate[0], massif_coordinate[1], **massif_name_to_marker_style[massif_name]) diff --git a/extreme_data/meteo_france_data/scm_models_data/visualization/study_visualizer.py b/extreme_data/meteo_france_data/scm_models_data/visualization/study_visualizer.py index 7a3c5b69c00964ce92b20843c4e5dff623d7b7c2..877c78c08eccc4ace8c830067c0579cfc1b541bb 100644 --- a/extreme_data/meteo_france_data/scm_models_data/visualization/study_visualizer.py +++ b/extreme_data/meteo_france_data/scm_models_data/visualization/study_visualizer.py @@ -541,11 +541,6 @@ class StudyVisualizer(VisualizationParameters): def show_or_save_to_file(self, add_classic_title=True, no_title=False, tight_layout=False, tight_pad=None, dpi=None, folder_for_variable=True): - if tight_layout: - if tight_pad is not None: - plt.tight_layout(**tight_pad) - else: - plt.tight_layout() assert self.plot_name is not None if add_classic_title: title = self.study.title @@ -568,19 +563,36 @@ class StudyVisualizer(VisualizationParameters): if not self.only_one_graph: filename += "{}".format('_'.join(self.plot_name.split())) + '_' filename += specific_title - self.savefig_in_results(filename, dpi=dpi) + # Save a first time in transparent + self.savefig_in_results(filename, transparent=True) + self.savefig_in_results(filename, transparent=False, tight_pad=tight_pad) @classmethod - def savefig_in_results(cls, filename, dpi=None, format='svg'): - assert format in ['png', 'svg'] - filepath = op.join(AbstractStudy.result_full_path, filename + '.' + format) + def savefig_in_results(cls, filename, transparent=True, tight_pad=None): + img_format = 'svg' if transparent else 'png' + filepath = op.join(AbstractStudy.result_full_path, filename + '.' + img_format) + if transparent: + dir_list = filepath.split('/') + dir_list[-1:] = ['transparent', dir_list[-1]] + filepath = '/'.join(dir_list) dirname = op.dirname(filepath) if not op.exists(dirname): os.makedirs(dirname, exist_ok=True) - if dpi is not None: - plt.savefig(filepath, dpi=dpi) + + if transparent: + plt.savefig(filepath, bbox_inches=0, transparent=True) else: - plt.savefig(filepath) + if tight_pad is not None: + plt.tight_layout(**tight_pad) + else: + plt.tight_layout() + plt.savefig(filepath, bbox_inches=0, transparent=False) + + + # if dpi is not None: + # plt.savefig(filepath, dpi=dpi) + # else: + # plt.savefig(filepath) def visualize_independent_margin_fits(self, threshold=None, axes=None, show=True): # Fit either a GEV or a GPD diff --git a/projects/altitude_spatial_model/altitudes_fit/altitudes_studies.py b/projects/altitude_spatial_model/altitudes_fit/altitudes_studies.py index 920107f0bcd814ec48f89a23d65aa88ac8434ad1..524f58aa6422afd2a71b0440708843509467b793 100644 --- a/projects/altitude_spatial_model/altitudes_fit/altitudes_studies.py +++ b/projects/altitude_spatial_model/altitudes_fit/altitudes_studies.py @@ -129,7 +129,7 @@ class AltitudesStudies(object): def _plot_maxima_time_series(self, massif_name, massif_id, show=False): ax = plt.gca() x = self.study.ordered_years - for altitude, study in list(self.altitude_to_study.items())[::-1]: + for altitude, study in list(self.altitude_to_study.items()): if massif_name in study.massif_name_to_annual_maxima: y = study.massif_name_to_annual_maxima[massif_name] label = '{} m'.format(altitude) @@ -138,11 +138,12 @@ class AltitudesStudies(object): # Plot for the paper 2 if massif_name == "Vanoise": - ax.yaxis.set_ticks([25 * (j) for j in range(6)]) + # ax.yaxis.set_ticks([25 * (j) for j in range(6)]) + ax.yaxis.set_ticks([25 * (j) for j in range(7)]) ax.tick_params(axis='both', which='major', labelsize=20) handles, labels = ax.get_legend_handles_labels() - ax.legend(handles[::-1], labels[::-1]) + ax.legend(handles[::-1], labels[::-1], prop={'size': 20}) plot_name = 'Annual maxima of {} in {}'.format(SCM_STUDY_CLASS_TO_ABBREVIATION[self.study_class], massif_name.replace('_', ' ')) # ax.set_ylabel('{} ({})'.format(plot_name, self.study.variable_unit), fontsize=15) diff --git a/projects/altitude_spatial_model/altitudes_fit/one_fold_analysis/altitudes_studies_visualizer_for_non_stationary_models.py b/projects/altitude_spatial_model/altitudes_fit/one_fold_analysis/altitudes_studies_visualizer_for_non_stationary_models.py index 898d601c419dd8a7a6eba9e928ddaed6e75eaf40..ef29f0d6b75102fdbc0315aff4b31d424616d2c4 100644 --- a/projects/altitude_spatial_model/altitudes_fit/one_fold_analysis/altitudes_studies_visualizer_for_non_stationary_models.py +++ b/projects/altitude_spatial_model/altitudes_fit/one_fold_analysis/altitudes_studies_visualizer_for_non_stationary_models.py @@ -265,14 +265,16 @@ class AltitudesStudiesVisualizerForNonStationaryModels(StudyVisualizer): def plot_shape_map(self): label = 'Shape parameter in 2019 (no unit)' + max_abs_change = self._max_abs_for_shape + 0.05 self.plot_map(massif_name_to_value=self.massif_name_to_shape, label=label, plot_name=label, + fontsize_label=15, add_x_label=True, graduation=0.1, massif_name_to_text=self.massif_name_to_best_name, cmap=matplotlib.cm.get_cmap('BrBG_r'), altitude=self.altitude_group.reference_altitude, add_colorbar=self.add_colorbar, - max_abs_change=self._max_abs_for_shape, + max_abs_change=max_abs_change, fit_method=self.fit_method, xlabel=self.altitude_group.xlabel, ) diff --git a/projects/altitude_spatial_model/altitudes_fit/plots/plot_coherence_curves.py b/projects/altitude_spatial_model/altitudes_fit/plots/plot_coherence_curves.py index d39ab87a7aca1809247ca750963f170e2d3fd7ee..f0b69b96048003aeb32a71def94e212027c77010 100644 --- a/projects/altitude_spatial_model/altitudes_fit/plots/plot_coherence_curves.py +++ b/projects/altitude_spatial_model/altitudes_fit/plots/plot_coherence_curves.py @@ -14,7 +14,7 @@ def plot_coherence_curves(massif_names, visualizer_list: List[AltitudesStudiesVi for massif_name in all_valid_names: # For plotting the legend - legend = True + legend = False if legend: ax = plt.gca() axes = [ax for _ in range(4)] @@ -82,11 +82,11 @@ def plot_coherence_curve(axes, massif_name, visualizer_list: List[AltitudesStudi else: ax.fill_between(x_list, lower_bound, upper_bound, color=color, alpha=0.2) - if is_altitudinal: + if legend and is_altitudinal: min, max = ax.get_ylim() ax.set_ylim([min, 2 * max]) - size = 15 if legend_line else 11 - ax.legend(prop={'size': size}) + size = 15 if legend_line else 11 + ax.legend(prop={'size': size}) ax.set_ylabel(label) diff --git a/projects/altitude_spatial_model/altitudes_fit/plots/plot_histogram_altitude_studies.py b/projects/altitude_spatial_model/altitudes_fit/plots/plot_histogram_altitude_studies.py index ddad3f10eb6b7f5e4f344a2999d118a6e15dab30..473ebb3441ee76c751d0de3a0ea34345837439d8 100644 --- a/projects/altitude_spatial_model/altitudes_fit/plots/plot_histogram_altitude_studies.py +++ b/projects/altitude_spatial_model/altitudes_fit/plots/plot_histogram_altitude_studies.py @@ -179,4 +179,4 @@ def plot_nb_massif_on_upper_axis(ax, labelsize, legend_fontsize, nb_massifs, x): ax_twiny.tick_params(labelsize=labelsize) ax_twiny.set_xticklabels(nb_massifs) ax_twiny.set_xlim(ax.get_xlim()) - ax_twiny.set_xlabel('Total number of massifs at each elevation (for the percentage)', fontsize=legend_fontsize) + ax_twiny.set_xlabel('Total number of massifs at each range (for the percentage)', fontsize=legend_fontsize) diff --git a/projects/altitude_spatial_model/preliminary_analysis.py b/projects/altitude_spatial_model/preliminary_analysis.py index 4c65cce1e34316a696e9884b959dd8e5ad5652bd..a8f5b66546736088da62cd464cfa703614434167 100644 --- a/projects/altitude_spatial_model/preliminary_analysis.py +++ b/projects/altitude_spatial_model/preliminary_analysis.py @@ -25,7 +25,7 @@ class PointwiseGevStudyVisualizer(AltitudesStudies): self.altitudes_for_temporal_hypothesis = [600, 1500, 2400, 3300] def plot_gev_params_against_altitude(self): - legend = True + legend = False param_names = GevParams.PARAM_NAMES + [100] if legend: param_names = param_names[:1] @@ -98,7 +98,7 @@ class PointwiseGevStudyVisualizer(AltitudesStudies): visualizer = StudyVisualizer(study=self.study, show=False, save_to_file=True) idx = 8 if param_name == GevParams.SHAPE else 1 the = ' the' if param_name in GevParams.PARAM_NAMES else '' - label = 'Elevation gradient for{} {}'.format(the, ylabel[:-idx] + '/100m)') + label = 'Elevation gradient for\n{} {}'.format(the, ylabel[:-idx] + '/100m)') gev_param_name_to_graduation = { GevParams.LOC: 0.5, GevParams.SCALE: 0.1, @@ -114,7 +114,7 @@ class PointwiseGevStudyVisualizer(AltitudesStudies): negative_and_positive_values=param_name == GevParams.SHAPE, add_colorbar=True, massif_name_to_text=massif_name_to_r2_score, - + fontsize_label=13, ) plt.close() diff --git a/test/test_extreme_data/test_meteo_france_data/test_SCM_study.py b/test/test_extreme_data/test_meteo_france_data/test_SCM_study.py index 39fc385d50863cea2fbf6fede85f2c736ba857e1..8a5b6229602b599d10b45dc21c791b070e8b3cc0 100644 --- a/test/test_extreme_data/test_meteo_france_data/test_SCM_study.py +++ b/test/test_extreme_data/test_meteo_france_data/test_SCM_study.py @@ -75,12 +75,12 @@ class TestSCMAllStudy(unittest.TestCase): values = list(massif_to_value.values()) vmin, vmax = min(values), max(values) massif_to_text = {m: round(a) for m, a in massif_to_value.items()} - # study.visualize_study(massif_name_to_value=massif_to_value, - # massif_name_to_text=massif_to_text, - # add_text=True, - # add_colorbar=True, - # vmin=vmin, vmax=vmax, - # show=False) + study.visualize_study(massif_name_to_value=massif_to_value, + massif_name_to_text=massif_to_text, + add_text=True, + add_colorbar=True, + vmin=vmin, vmax=vmax, + show=False) self.assertTrue(True)