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 9d70c864b0aa0cab6fb4aca4fd159f33fc30f133..2dd13ecbe41fa077173baf882bc09f04804b6e33 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 33138dcc92535daa308b97d7ea6317dfcf85029f..75e0f2190c702d1e67c56c4911ebf3e736ed5815 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 dae8f4ebbf81ce796cb236c7dc8ab1e2c079f197..12624a003aa827aa57c7f11b7f2a22680354c8e2 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 2dafde179b117d4815eb58b6ab94de275c8b76b2..28861c40726e2e51e2d32308163cf3167574b538 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 ad0fa2a4e19aa0ec767081f3f1d6fe8431d0a80e..6ebcbd94da8c0a415c5261e94278a751abba583d 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 75c3779316a397c4f83c93592d67d9119c6591a9..9a818a6d8ec3e9412fff9ec9976a0173182b0a9f 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 44260de4ec39b77d0ed43441799e115cccf6df2b..6c7f578185e2b249cfd1ab48468d5982ab87a848 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()