Commit 0ea412ac authored by Le Roux Erwan's avatar Le Roux Erwan
Browse files

[contrasting] improve display for the several figures

parent 869c38a5
No related merge requests found
Showing with 32 additions and 14 deletions
+32 -14
...@@ -650,6 +650,10 @@ class AbstractStudy(object): ...@@ -650,6 +650,10 @@ class AbstractStudy(object):
""" Spatial properties """ """ Spatial properties """
@cached_property
def massif_name_to_massif_id(self):
return {name: i for i, name in enumerate(self.study_massif_names)}
@classproperty @classproperty
def original_safran_massif_id_to_massif_name(cls) -> Dict[int, str]: def original_safran_massif_id_to_massif_name(cls) -> Dict[int, str]:
return {massif_id: massif_name for massif_id, massif_name in enumerate(cls.all_massif_names)} return {massif_id: massif_name for massif_id, massif_name in enumerate(cls.all_massif_names)}
......
...@@ -113,7 +113,7 @@ class AltitudesStudies(object): ...@@ -113,7 +113,7 @@ class AltitudesStudies(object):
ax.xaxis.set_ticks(x[1::10]) ax.xaxis.set_ticks(x[1::10])
ax.tick_params(axis='both', which='major', labelsize=13) ax.tick_params(axis='both', which='major', labelsize=13)
ax.legend() ax.legend()
plot_name = 'Annual maxima of {}\nin {}'.format(SCM_STUDY_CLASS_TO_ABBREVIATION[self.study_class], massif_name) plot_name = 'Annual maxima of {} in {}'.format(SCM_STUDY_CLASS_TO_ABBREVIATION[self.study_class], massif_name)
ax.set_ylabel('{} ({})'.format(plot_name, self.study.variable_unit), fontsize=15) ax.set_ylabel('{} ({})'.format(plot_name, self.study.variable_unit), fontsize=15)
ax.set_xlabel('years', fontsize=15) ax.set_xlabel('years', fontsize=15)
self.show_or_save_to_file(plot_name=plot_name, show=show) self.show_or_save_to_file(plot_name=plot_name, show=show)
...@@ -152,6 +152,7 @@ class AltitudesStudies(object): ...@@ -152,6 +152,7 @@ class AltitudesStudies(object):
moment = after - before moment = after - before
if change is None: if change is None:
moment /= before moment /= before
moment *= 100
else: else:
moment = function(annual_maxima) moment = function(annual_maxima)
mean_moment.append(moment) mean_moment.append(moment)
......
...@@ -9,17 +9,17 @@ def main_plots_moments(): ...@@ -9,17 +9,17 @@ def main_plots_moments():
study_classes = [SafranSnowfall1Day, SafranSnowfall3Days, SafranSnowfall5Days, SafranSnowfall7Days][:2] study_classes = [SafranSnowfall1Day, SafranSnowfall3Days, SafranSnowfall5Days, SafranSnowfall7Days][:2]
study_classes = [SafranPrecipitation1Day, SafranPrecipitation3Days, SafranPrecipitation5Days, study_classes = [SafranPrecipitation1Day, SafranPrecipitation3Days, SafranPrecipitation5Days,
SafranPrecipitation7Days][:] SafranPrecipitation7Days][:]
study_classes = [SafranSnowfall1Day, SafranPrecipitation1Day] study_classes = [SafranSnowfall1Day, SafranPrecipitation1Day][:]
for study_class in study_classes: for study_class in study_classes:
studies = AltitudesStudies(study_class, altitudes) studies = AltitudesStudies(study_class, altitudes)
# massifs_names = ['Vercors', 'Chartreuse', 'Belledonne'] # massifs_names = ['Vercors', 'Chartreuse', 'Belledonne']
# studies.plot_mean_maxima_against_altitude(massif_names=massifs_names, show=True) # studies.plot_mean_maxima_against_altitude(massif_names=massifs_names, show=True)
# studies.plot_maxima_time_series() studies.plot_maxima_time_series()
for std in [True, False]: # for std in [True, False]:
for change in [True, False, None]: # for change in [True, False, None]:
studies.plot_mean_maxima_against_altitude(std=std, change=change) # studies.plot_mean_maxima_against_altitude(std=std, change=change)
if __name__ == '__main__': if __name__ == '__main__':
......
...@@ -8,10 +8,11 @@ from extreme_data.meteo_france_data.scm_models_data.safran.safran import SafranR ...@@ -8,10 +8,11 @@ from extreme_data.meteo_france_data.scm_models_data.safran.safran import SafranR
Altitudes_groups = [[300, 600, 900], [1200, 1500, 1800], [2100, 2400, 2700], [3000, 3300, 3600]] Altitudes_groups = [[300, 600, 900], [1200, 1500, 1800], [2100, 2400, 2700], [3000, 3300, 3600]]
def compute_smoother_snowfall_fraction(altitudes, year_min, year_max, lim): def compute_smoother_snowfall_fraction(altitudes, year_min, year_max, lim, massif_names=None):
all_time_series = np.concatenate([get_time_series(altitude, year_min, year_max) for altitude in altitudes], axis=1) all_time_series = np.concatenate([get_time_series(altitude, year_min, year_max, massif_names) for altitude in altitudes], axis=1)
temperature_array, snowfall_array, rainfall_array = all_time_series temperature_array, snowfall_array, rainfall_array = all_time_series
nb_bins_for_one_celsius = 4 # nb_bins_for_one_celsius = 4
nb_bins_for_one_celsius = 2
bins = np.linspace(-lim, lim, num=int((nb_bins_for_one_celsius * 2 * lim) + 1)) bins = np.linspace(-lim, lim, num=int((nb_bins_for_one_celsius * 2 * lim) + 1))
inds = np.digitize(temperature_array, bins) inds = np.digitize(temperature_array, bins)
snowfall_fractions = [] snowfall_fractions = []
...@@ -23,9 +24,10 @@ def compute_smoother_snowfall_fraction(altitudes, year_min, year_max, lim): ...@@ -23,9 +24,10 @@ def compute_smoother_snowfall_fraction(altitudes, year_min, year_max, lim):
return np.array(snowfall_fractions), x return np.array(snowfall_fractions), x
def daily_snowfall_fraction(ax, altitudes, year_min=1959, year_max=2019): def daily_snowfall_fraction(ax, altitudes, year_min=1959, year_max=2019, massif_names=None):
lim = 6 lim = 6
snowfall_fractions, x = compute_smoother_snowfall_fraction(altitudes, year_min, year_max, lim=lim) snowfall_fractions, x = compute_smoother_snowfall_fraction(altitudes, year_min, year_max, lim=lim,
massif_names=massif_names)
sigma = 1.0 sigma = 1.0
snowfall_fractions = 100 * gaussian_filter1d(snowfall_fractions, sigma=sigma) snowfall_fractions = 100 * gaussian_filter1d(snowfall_fractions, sigma=sigma)
# Plot results # Plot results
...@@ -62,12 +64,20 @@ def end_plot(ax, sigma): ...@@ -62,12 +64,20 @@ def end_plot(ax, sigma):
ax.legend() ax.legend()
def get_time_series(altitude, year_min, year_max): def get_time_series(altitude, year_min, year_max, massif_names=None):
temperature_study = SafranTemperature(altitude=altitude, year_min=year_min, year_max=year_max) temperature_study = SafranTemperature(altitude=altitude, year_min=year_min, year_max=year_max)
study_rainfall = SafranRainfall1Day(altitude=altitude, year_min=year_min, year_max=year_max) study_rainfall = SafranRainfall1Day(altitude=altitude, year_min=year_min, year_max=year_max)
study_snowfall = SafranSnowfall1Day(altitude=altitude, year_min=year_min, year_max=year_max) study_snowfall = SafranSnowfall1Day(altitude=altitude, year_min=year_min, year_max=year_max)
all_time_series = [temperature_study.all_daily_series, study_snowfall.all_daily_series, studies = [temperature_study, study_rainfall, study_snowfall]
if massif_names is None:
all
all_time_series = [temperature_study.all_daily_series,
study_snowfall.all_daily_series,
study_rainfall.all_daily_series] study_rainfall.all_daily_series]
if massif_names is not None:
# Select only the index corresponding to the massif of interest
massif_ids = [temperature_study.massif_name_to_massif_id[name] for name in massif_names]
all_time_series = [a[:, massif_ids] for a in all_time_series]
all_time_series = [np.concatenate(t) for t in all_time_series] all_time_series = [np.concatenate(t) for t in all_time_series]
all_time_series = np.array(all_time_series) all_time_series = np.array(all_time_series)
return all_time_series return all_time_series
...@@ -76,8 +86,11 @@ def get_time_series(altitude, year_min, year_max): ...@@ -76,8 +86,11 @@ def get_time_series(altitude, year_min, year_max):
def daily_snowfall_fraction_wrt_altitude(fast=True): def daily_snowfall_fraction_wrt_altitude(fast=True):
ax = plt.gca() ax = plt.gca()
groups = [[1800]] if fast else Altitudes_groups groups = [[1800]] if fast else Altitudes_groups
groups = [[a] for a in [900, 1200, 1500]]
massif_names = None
massif_names = ['Vercors']
for altitudes in groups: for altitudes in groups:
daily_snowfall_fraction(ax, altitudes) daily_snowfall_fraction(ax, altitudes, massif_names=massif_names, year_max=1999)
plt.show() plt.show()
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment