From b71981529083fa1fd78f5a361a29931fec2c7a82 Mon Sep 17 00:00:00 2001 From: Le Roux Erwan <erwan.le-roux@irstea.fr> Date: Mon, 11 Mar 2019 17:59:42 +0100 Subject: [PATCH] [SCM] add independent fits visualization to the function visualize_margin_fits --- .../meteo_france_SCM_study/safran/safran.py | 4 ++-- .../main_study_visualizer.py | 3 ++- .../study_visualization/study_visualizer.py | 24 ++++++++++++------- 3 files changed, 19 insertions(+), 12 deletions(-) diff --git a/experiment/meteo_france_SCM_study/safran/safran.py b/experiment/meteo_france_SCM_study/safran/safran.py index 94328f14..5b8e19bc 100644 --- a/experiment/meteo_france_SCM_study/safran/safran.py +++ b/experiment/meteo_france_SCM_study/safran/safran.py @@ -18,8 +18,8 @@ class Safran(AbstractStudy): class SafranFrequency(Safran): - def __init__(self, variable_class: type, nb_consecutive_days=1, *args, **kwargs): - assert nb_consecutive_days <= 7 + def __init__(self, variable_class: type, nb_consecutive_days: int = 1, *args, **kwargs): + assert 1 <= nb_consecutive_days <= 7 super().__init__(variable_class, *args, **kwargs) self.nb_consecutive_days = nb_consecutive_days diff --git a/experiment/meteo_france_SCM_study/visualization/study_visualization/main_study_visualizer.py b/experiment/meteo_france_SCM_study/visualization/study_visualization/main_study_visualizer.py index 1ba595d6..592a57eb 100644 --- a/experiment/meteo_france_SCM_study/visualization/study_visualization/main_study_visualizer.py +++ b/experiment/meteo_france_SCM_study/visualization/study_visualization/main_study_visualizer.py @@ -22,7 +22,8 @@ def study_iterator(study_class, only_first_one=False, both_altitude=False, verbo for alti in AbstractStudy.ALTITUDES[::1]: if verbose: print('alti: {}, nb_day: {}'.format(alti, nb_day)) - study = study_class(altitude=alti, nb_consecutive_days=nb_day) if is_safran_study else study_class(altitude=alti) + study = study_class(altitude=alti, nb_consecutive_days=nb_day) if is_safran_study \ + else study_class(altitude=alti) yield study if only_first_one and not both_altitude: break diff --git a/experiment/meteo_france_SCM_study/visualization/study_visualization/study_visualizer.py b/experiment/meteo_france_SCM_study/visualization/study_visualization/study_visualizer.py index f374dff4..50121a0f 100644 --- a/experiment/meteo_france_SCM_study/visualization/study_visualization/study_visualizer.py +++ b/experiment/meteo_france_SCM_study/visualization/study_visualization/study_visualizer.py @@ -214,15 +214,19 @@ class StudyVisualizer(object): max_stable_models = load_test_max_stable_models(default_covariance_function=default_covariance_function) if only_first_max_stable: max_stable_models = max_stable_models[:1] - fig, axes = plt.subplots(len(max_stable_models) + 1, len(GevParams.SUMMARY_NAMES), figsize=self.figsize) + fig, axes = plt.subplots(len(max_stable_models) + 2, len(GevParams.SUMMARY_NAMES), figsize=self.figsize) fig.subplots_adjust(hspace=self.subplot_space, wspace=self.subplot_space) margin_class = LinearAllParametersAllDimsMarginModel + + # Plot the margin fit independently + self.visualize_independent_margin_fits(threshold=None, axes=axes[0], show=False) # Plot the smooth margin only margin_model = margin_class(coordinates=self.coordinates) estimator = SmoothMarginEstimator(dataset=self.dataset, margin_model=margin_model) - self.fit_and_visualize_estimator(estimator, axes[0], title='without max stable') + self.fit_and_visualize_estimator(estimator, axes[1], title='without max stable') + # Plot the smooth margin fitted with a max stable - for i, max_stable_model in enumerate(max_stable_models, 1): + for i, max_stable_model in enumerate(max_stable_models, 2): margin_model = margin_class(coordinates=self.coordinates) estimator = FullEstimatorInASingleStepWithSmoothMargin(self.dataset, margin_model, max_stable_model) title = get_display_name_from_object_type(type(max_stable_model)) @@ -247,6 +251,11 @@ class StudyVisualizer(object): updated_lim = new_lim * self.coef_zoom_map + (1 - self.coef_zoom_map) * old_lim for i, method in enumerate([ax.set_xlim, ax.set_ylim]): method(updated_lim[i, 0], updated_lim[i, 1]) + self.clean_axes_write_title_on_the_left(axes, title) + + @staticmethod + def clean_axes_write_title_on_the_left(axes, title): + for ax in axes: ax.tick_params(axis=u'both', which=u'both', length=0) ax.spines['top'].set_visible(False) ax.spines['right'].set_visible(False) @@ -257,9 +266,6 @@ class StudyVisualizer(object): ax.set_aspect('equal') ax0 = axes[0] ax0.get_yaxis().set_visible(True) - # todo: manage to remove ticks on ylabel - # finally it's good because it differntiate it from the other labels - # maybe i could put it in bold ax0.set_ylabel(title) ax0.tick_params(axis=u'both', which=u'both', length=0) @@ -283,7 +289,7 @@ class StudyVisualizer(object): os.makedirs(dirname, exist_ok=True) plt.savefig(filepath) - def visualize_independent_margin_fits(self, threshold=None, axes=None): + def visualize_independent_margin_fits(self, threshold=None, axes=None, show=True): # Fit either a GEV or a GPD if threshold is None: params_names = GevParams.SUMMARY_NAMES @@ -301,9 +307,9 @@ class StudyVisualizer(object): self.study.visualize_study(ax=ax, massif_name_to_value=df.loc[gev_param_name, :].to_dict(), show=False, replace_blue_by_white=gev_param_name != GevParams.SHAPE, label=gev_param_name) + self.clean_axes_write_title_on_the_left(axes, title='Independent fits') - if self.show: - # plot_name = 'Full Likelihood with Linear marginals and max stable dependency structure' + if show: plt.show() def visualize_annual_mean_values(self, ax=None, take_mean_value=True): -- GitLab