From ace1895617016476d241f76faf8d0866a9586694 Mon Sep 17 00:00:00 2001 From: Le Roux Erwan <erwan.le-roux@irstea.fr> Date: Mon, 8 Feb 2021 12:14:33 +0100 Subject: [PATCH] [contrasting] Final modifications for the plot for the v5 of the article --- .../scm_models_data/abstract_study.py | 1 - .../visualization/plot_utils.py | 7 +++-- .../altitudes_fit/main_altitudes_studies.py | 11 ++++---- ...es_visualizer_for_non_stationary_models.py | 6 ++--- .../one_fold_analysis/plot_total_aic.py | 6 ++--- .../plots/plot_histogram_altitude_studies.py | 18 ++++++++----- .../preliminary_analysis.py | 26 ++++++++++++++----- 7 files changed, 47 insertions(+), 28 deletions(-) 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 9d70c864..2dd13ecb 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 @@ -904,7 +904,6 @@ class AbstractStudy(object): confidence_interval_based_on_delta_method=confidence_interval_based_on_delta_method) end = time.time() duration = end - start - print('Multiprocessing for study duration', duration) if -0.5 <= gev_params.shape <= 0.5: massif_name_to_stationary_gev_params[massif_name] = gev_params diff --git a/extreme_data/meteo_france_data/scm_models_data/visualization/plot_utils.py b/extreme_data/meteo_france_data/scm_models_data/visualization/plot_utils.py index 33138dcc..75e0f219 100644 --- a/extreme_data/meteo_france_data/scm_models_data/visualization/plot_utils.py +++ b/extreme_data/meteo_france_data/scm_models_data/visualization/plot_utils.py @@ -8,7 +8,7 @@ from extreme_data.meteo_france_data.scm_models_data.visualization.create_shifted def plot_against_altitude(x_ticks, ax, massif_id, massif_name, values, altitude=None, fill=False, massif_name_as_labels=True, - elevation_as_xaxis=True): + elevation_as_xaxis=True, legend=False): if massif_name_as_labels: di = massif_id // 8 if di == 0: @@ -29,7 +29,10 @@ def plot_against_altitude(x_ticks, ax, massif_id, massif_name, values, altitude= label = '{} m'.format(altitude) if not fill: args = [x_ticks, values] if elevation_as_xaxis else [values, x_ticks] - ax.plot(*args, color=color, linewidth=2, label=label, linestyle=linestyle, marker='o') + if legend: + ax.plot(*args, color=color, linewidth=2, label=label, linestyle=linestyle) + else: + ax.plot(*args, color=color, linewidth=2, label=label, linestyle=linestyle, marker='o') else: assert elevation_as_xaxis, NotImplementedError('todo') lower_bound, upper_bound = zip(*values) diff --git a/projects/altitude_spatial_model/altitudes_fit/main_altitudes_studies.py b/projects/altitude_spatial_model/altitudes_fit/main_altitudes_studies.py index dae8f4eb..12624a00 100644 --- a/projects/altitude_spatial_model/altitudes_fit/main_altitudes_studies.py +++ b/projects/altitude_spatial_model/altitudes_fit/main_altitudes_studies.py @@ -47,6 +47,7 @@ def main(): fast = False if fast is None: massif_names = None + AbstractExtractEurocodeReturnLevel.NB_BOOTSTRAP = 10 altitudes_list = altitudes_for_groups[2:3] elif fast: AbstractExtractEurocodeReturnLevel.NB_BOOTSTRAP = 10 @@ -80,11 +81,11 @@ def main_loop(altitudes_list, massif_names, seasons, study_classes, model_must_p def plot_visualizers(massif_names, visualizer_list): - plot_histogram_all_models_against_altitudes(massif_names, visualizer_list) - # plot_histogram_all_trends_against_altitudes(massif_names, visualizer_list) + # plot_histogram_all_models_against_altitudes(massif_names, visualizer_list) + plot_histogram_all_trends_against_altitudes(massif_names, visualizer_list) # plot_shoe_plot_ratio_interval_size_against_altitude(massif_names, visualizer_list) - # for relative in [True, False]: - # plot_shoe_plot_changes_against_altitude(massif_names, visualizer_list, relative=relative) + for relative in [True, False]: + plot_shoe_plot_changes_against_altitude(massif_names, visualizer_list, relative=relative) # plot_coherence_curves(massif_names, visualizer_list) # plot_coherence_curves(['Vanoise'], visualizer_list) pass @@ -96,7 +97,7 @@ def plot_visualizer(massif_names, visualizer): # visualizer.studies.plot_maxima_time_series(['Vanoise']) # Plot the results for the model that minimizes the individual aic - # plot_individual_aic(visualizer) + plot_individual_aic(visualizer) # Plot the results for the model that minimizes the total aic # plot_total_aic(model_classes, visualizer) 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 2dafde17..28861c40 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 @@ -196,9 +196,9 @@ class AltitudesStudiesVisualizerForNonStationaryModels(StudyVisualizer): fontsize_label = 17 else: # cmap = plt.cm.RdYlGn - cmap = [plt.cm.coolwarm, plt.cm.bwr, plt.cm.seismic][2] - cmap = get_inverse_colormap(cmap) - cmap = get_cmap_with_inverted_blue_and_green_channels(cmap) + cmap = [plt.cm.coolwarm, plt.cm.bwr, plt.cm.seismic][1] + # cmap = get_inverse_colormap(cmap) + # cmap = get_cmap_with_inverted_blue_and_green_channels(cmap) cmap = remove_the_extreme_colors(cmap) graduation = 10 fontsize_label = 10 diff --git a/projects/altitude_spatial_model/altitudes_fit/one_fold_analysis/plot_total_aic.py b/projects/altitude_spatial_model/altitudes_fit/one_fold_analysis/plot_total_aic.py index ad0fa2a4..6ebcbd94 100644 --- a/projects/altitude_spatial_model/altitudes_fit/one_fold_analysis/plot_total_aic.py +++ b/projects/altitude_spatial_model/altitudes_fit/one_fold_analysis/plot_total_aic.py @@ -14,9 +14,9 @@ from projects.exceeding_snow_loads.utils import dpi_paper1_figure def plots(visualizer: AltitudesStudiesVisualizerForNonStationaryModels): - visualizer.plot_shape_map() - # visualizer.plot_moments() - visualizer.plot_qqplots() + # visualizer.plot_shape_map() + visualizer.plot_moments() + # visualizer.plot_qqplots() # for std in [True, False]: # visualizer.studies.plot_mean_maxima_against_altitude(std=std) 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 75c37793..9a818a6d 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 @@ -96,8 +96,8 @@ def plot_histogram_all_trends_against_altitudes(massif_names, visualizer_list: L linewidth = 3 x = np.array([3 * width * (i + 1) for i in range(len(nb_massifs))]) - # colors = ['blue', 'darkblue', 'red', 'darkred'] - colors = ['red', 'darkred', 'limegreen', 'darkgreen'] + colors = ['blue', 'darkblue', 'red', 'darkred'] + # colors = ['red', 'darkred', 'limegreen', 'darkgreen'] labels = [] for suffix in ['decrease', 'increase']: for prefix in ['Non significant', 'Significant']: @@ -184,10 +184,13 @@ def plot_shoe_plot_changes_against_altitude(massif_names, visualizer_list: List[ all_changes = [v.all_changes(massif_names, relative=relative) for v in visualizer_list] all_changes = list(zip(*all_changes)) - labels = ['All massifs', 'Massifs with a selected model temporally non-stationary', - 'Massifs with a selected model temporally non-stationary and significant'] + labels = ['All massifs', 'Massifs with a selected model\n' + 'temporally non-stationary', + 'Massifs with a selected model\n' + 'temporally non-stationary and significant'] # colors = ['darkmagenta', 'darkviolet', 'mediumorchid'] - colors = ['mediumblue', 'royalblue', 'lightskyblue'] + # colors = ['mediumblue', 'royalblue', 'lightskyblue'] + colors = ['darkgreen', 'forestgreen', 'limegreen'] nb_massifs = [len(v.get_valid_names(massif_names)) for v in visualizer_list] plt.close() @@ -216,7 +219,8 @@ def plot_shoe_plot_changes_against_altitude(massif_names, visualizer_list: List[ patch.set_facecolor(color) custom_lines = [Line2D([0], [0], color=color, lw=4) for color in colors] - ax.legend(custom_lines, labels, prop={'size': 8}) + loc = 'upper right' if relative else 'upper left' + ax.legend(custom_lines, labels, prop={'size': 12}, loc=loc) start = 'Relative changes' if relative else 'Changes' unit = '\%' if relative else visualizer.study.variable_unit @@ -233,7 +237,7 @@ def plot_shoe_plot_changes_against_altitude(massif_names, visualizer_list: List[ shift = 2 * width ax.set_xlim((min(x) - shift, max(x) + shift)) - upper_limit_for_legend = 0 if relative else 0 + upper_limit_for_legend = 50 if relative else 0 lim_down, lim_up = ax.get_ylim() ax.set_ylim(lim_down, lim_up + upper_limit_for_legend) diff --git a/projects/altitude_spatial_model/preliminary_analysis.py b/projects/altitude_spatial_model/preliminary_analysis.py index 44260de4..6c7f5781 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 = False + legend = True elevation_as_xaxis = False param_names = GevParams.PARAM_NAMES + [100] if legend: @@ -39,7 +39,7 @@ class PointwiseGevStudyVisualizer(AltitudesStudies): for i in range(8): for massif_name in massif_names[i::8]: linear_coef, _, r2 = self._plot_gev_params_against_altitude_one_massif(ax, massif_name, param_name, - elevation_as_xaxis) + elevation_as_xaxis, legend=legend) massif_name_to_linear_coef[massif_name] = 100 * linear_coef[0] massif_name_to_r2_score[massif_name] = str(round(r2, 2)) print(param_name, np.mean([c for c in massif_name_to_linear_coef.values()])) @@ -115,8 +115,19 @@ class PointwiseGevStudyVisualizer(AltitudesStudies): if legend: # ax.legend(labelspacing=2.5, ncol=8, handlelength=12, markerscale=0.7, bbox_to_anchor=(1.05, 1), loc='upper left', # prop={'size': 2}, fontsize='x-large') - ax.legend(labelspacing=2.5, ncol=8, handlelength=10, markerscale=0.7, bbox_to_anchor=(1.05, 1), loc='upper left', - prop={'size': 2}, fontsize='xx-large') + # ax.legend(labelspacing=1, ncol=8, handlelength=5, bbox_to_anchor=(1.05, 1), loc='upper left', + # prop={'size': 4}, fontsize='xx-large', columnspacing=0.5) + ax.legend(ncol=8, bbox_to_anchor=(1.05, 1), loc='upper left', + prop={'size': 3.5}, handlelength=5, fontsize='xx-large', columnspacing=0.5, + handletextpad=0.5) + + # handles, labels = ax.get_legend_handles_labels() + # print(type(handles)) + # handles = np.array(handles).reshape((3, 8)).transpose().flatten() + # labels = np.array(handles).reshape((3, 8)).transpose().flatten() + # ax.legend(handles, labels) + + plt.gcf().subplots_adjust(right=0.15) ax.set_yticks([]) ax.set_ylabel('') @@ -150,7 +161,7 @@ class PointwiseGevStudyVisualizer(AltitudesStudies): ) plt.close() - def _plot_gev_params_against_altitude_one_massif(self, ax, massif_name, param_name, elevation_as_xaxis): + def _plot_gev_params_against_altitude_one_massif(self, ax, massif_name, param_name, elevation_as_xaxis, legend=False): altitudes = [] params = [] # confidence_intervals = [] @@ -166,7 +177,8 @@ class PointwiseGevStudyVisualizer(AltitudesStudies): params.append(param) # confidence_intervals.append(gev_params.param_name_to_confidence_interval[param_name]) massif_id = self.study.all_massif_names().index(massif_name) - plot_against_altitude(altitudes, ax, massif_id, massif_name, params, fill=False, elevation_as_xaxis=elevation_as_xaxis) + plot_against_altitude(altitudes, ax, massif_id, massif_name, params, fill=False, elevation_as_xaxis=elevation_as_xaxis, + legend=legend) return fit_linear_regression(altitudes, params) # plot_against_altitude(altitudes, ax, massif_id, massif_name, confidence_intervals, fill=True) @@ -294,7 +306,7 @@ if __name__ == '__main__': altitudes = list(chain.from_iterable(altitudes_for_groups)) # altitudes = paper_altitudes - # altitudes = [1800, 2100] + altitudes = [1800, 2100] visualizer = PointwiseGevStudyVisualizer(SafranSnowfall1Day, altitudes=altitudes) visualizer.plot_gev_params_against_altitude() # visualizer.plot_gev_params_against_time_for_all_altitudes() -- GitLab