Commit f993a9f1 authored by Le Roux Erwan's avatar Le Roux Erwan
Browse files

[contrasting] plots modification after nico's comments

parent dc8e240b
No related merge requests found
Showing with 52 additions and 33 deletions
+52 -33
......@@ -55,12 +55,12 @@ def main_loop(altitudes_list, massif_names, seasons, study_classes):
def plot_visualizers(massif_names, visualizer_list):
# plot_histogram_all_trends_against_altitudes(massif_names, visualizer_list)
plot_histogram_all_trends_against_altitudes(massif_names, visualizer_list)
for relative in [True, False]:
# plot_shoe_plot_changes_against_altitude(massif_names, visualizer_list, relative=relative)
plot_shoe_plot_changes_against_altitude_for_maxima_and_total(massif_names, visualizer_list, relative=relative)
plot_shoe_plot_changes_against_altitude(massif_names, visualizer_list, relative=relative)
# plot_shoe_plot_changes_against_altitude_for_maxima_and_total(massif_names, visualizer_list, relative=relative)
# plot_coherence_curves(massif_names, visualizer_list)
# plot_coherence_curves(['Vanoise'], visualizer_list)
plot_coherence_curves(['Vanoise'], visualizer_list)
def plot_visualizer(massif_names, visualizer):
......
......@@ -186,8 +186,8 @@ class AltitudesStudiesVisualizerForNonStationaryModels(StudyVisualizer):
@property
def add_colorbar(self):
return isinstance(self.altitude_group, (VeyHighAltitudeGroup))
# return isinstance(self.altitude_group, (VeyHighAltitudeGroup, MidAltitudeGroup))
# return isinstance(self.altitude_group, (VeyHighAltitudeGroup))
return isinstance(self.altitude_group, (VeyHighAltitudeGroup, MidAltitudeGroup))
def plot_against_years(self, method_name, order):
ax = plt.gca()
......@@ -498,5 +498,5 @@ class AltitudesStudiesVisualizerForNonStationaryModels(StudyVisualizer):
ax.set_yticks(ticks)
ax.tick_params(labelsize=15)
plot_name = 'qqplot/{}'.format(massif_name_corrected)
self.studies.show_or_save_to_file(plot_name=plot_name, show=self.show)
self.studies.show_or_save_to_file(plot_name=plot_name, show=self.show, no_title=True)
plt.close()
......@@ -100,7 +100,7 @@ class OneFoldFit(object):
def relative_change_in_return_level_for_reference_altitude(self) -> float:
return self.relative_changes_of_moment(altitudes=[self.altitude_plot], order=None)[0]
def changes_of_moment(self, altitudes, year=2019, nb_years=50, order=1):
def changes_of_moment(self, altitudes, year=2019, nb_years=60, order=1):
changes = []
for altitude in altitudes:
mean_after = self.get_moment(altitude, year, order)
......@@ -109,7 +109,7 @@ class OneFoldFit(object):
changes.append(change)
return changes
def relative_changes_of_moment(self, altitudes, year=2019, nb_years=50, order=1):
def relative_changes_of_moment(self, altitudes, year=2019, nb_years=60, order=1):
relative_changes = []
for altitude in altitudes:
mean_after = self.get_moment(altitude, year, order)
......@@ -293,7 +293,7 @@ class OneFoldFit(object):
def sign_of_change(self, estimator):
return_levels = []
for year in [2019 - 50, 2019]:
for year in [2019 - 60, 2019]:
coordinate = np.array([self.altitude_plot, year])
return_level = estimator.function_from_fit.get_params(
coordinate=coordinate,
......
......@@ -2,6 +2,9 @@ import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
from projects.altitude_spatial_model.altitudes_fit.one_fold_analysis.altitudes_studies_visualizer_for_non_stationary_models import \
AltitudesStudiesVisualizerForNonStationaryModels
mpl.rcParams['text.usetex'] = True
mpl.rcParams['text.latex.preamble'] = [r'\usepackage{amsmath}']
......@@ -10,17 +13,12 @@ from projects.altitude_spatial_model.altitudes_fit.one_fold_analysis.one_fold_fi
from projects.exceeding_snow_loads.utils import dpi_paper1_figure
def plots(visualizer):
visualizer.plot_shape_map()
def plots(visualizer: AltitudesStudiesVisualizerForNonStationaryModels):
# visualizer.plot_shape_map()
visualizer.plot_moments()
# visualizer.plot_qqplots()
# for plot_mean in [True, False]:
# visualizer.plot_year_for_the_peak(plot_mean=plot_mean)
# visualizer.plot_best_coef_maps()
# visualizer.plot_peak_year_against_altitude()
# visualizer.plot_altitude_switch_against_peak_year()
# for std in [True, False]:
# visualizer.studies.plot_mean_maxima_against_altitude(std=std)
def plot_individual_aic(visualizer):
......
from extreme_data.meteo_france_data.scm_models_data.safran.safran import SafranSnowfall1Day
from projects.altitude_spatial_model.altitudes_fit.altitudes_studies import AltitudesStudies
if __name__ == '__main__':
studies = AltitudesStudies(study_class=SafranSnowfall1Day,
altitudes=[600, 900, 1200, 1500, 1800, 2100, 2400, 2700, 3000, 3300, 3600])
for std in [True, False]:
studies.plot_mean_maxima_against_altitude(std=std)
\ No newline at end of file
......@@ -32,7 +32,7 @@ def compute_changes_in_total_snowfall(visualizer_list: List[
def compute_change_in_total(study, massif_name, relative, plot=False):
annual_total = study.massif_name_to_annual_total[massif_name]
a, b, r2score = fit_linear_regression(study.ordered_years, annual_total)
years_for_change = [1969, 2019]
years_for_change = [1959, 2019]
values = [a * y + b for y in years_for_change]
change = values[1] - values[0]
if relative:
......
......@@ -25,11 +25,11 @@ def plot_coherence_curves(massif_names, visualizer_list: List[AltitudesStudiesVi
if i % 2 == 1:
ax.set_yticks([])
axes = [ax if i % 2 == 0 else ax.twinx() for i, ax in enumerate(axes)]
colors = ['blue', 'yellow', 'green']
labels = ['Elevational-temporal model in 2019', 'Elevational-temporal model in 1969', 'Pointwise distribution']
colors = ['tab:orange', 'blue', 'green']
labels = ['Elevational-temporal model in 1959', 'Elevational-temporal model in 2019', 'Pointwise distribution']
altitudinal_model = [True, True, False]
years = [2019, 1969, None]
for color, global_label, boolean, year in list(zip(colors, labels, altitudinal_model, years))[::2]:
years = [1959, 2019, None]
for color, global_label, boolean, year in list(zip(colors, labels, altitudinal_model, years))[:]:
plot_coherence_curve(axes, massif_name, visualizer_list, boolean, color, global_label, year, legend)
visualizer.plot_name = '{}/{}'.format(folder, massif_name.replace('_', '-'))
visualizer.show_or_save_to_file(add_classic_title=False, no_title=True, dpi=200)
......@@ -41,7 +41,7 @@ def plot_coherence_curve(axes, massif_name, visualizer_list: List[AltitudesStudi
x_all_list, values_all_list, labels, all_bound_list = load_all_list(massif_name, visualizer_list, is_altitudinal,
year)
legend_line = False
legend_line = True
for i, label in enumerate(labels):
if legend and i != 3:
continue
......@@ -71,18 +71,18 @@ def plot_coherence_curve(axes, massif_name, visualizer_list: List[AltitudesStudi
ax.plot(x_list, value_list_dotted, linestyle='dotted', color=color)
# Plot confidence interval
if i == 3:
if i == 3 and year in [None, 2019]:
for j, (x_list, bounds) in enumerate(list(zip(x_all_list, all_bound_list))):
if len(bounds) > 0:
lower_bound, upper_bound = bounds
if legend and not legend_line:
model_name = 'elevational-temporal model' if is_altitudinal else 'pointwise distribution'
model_name = 'elevational-temporal model in 2019' if is_altitudinal else 'pointwise distribution'
fill_label = "95\% confidence interval for the {}".format(model_name) if j == 0 else None
ax.fill_between(x_list, lower_bound, upper_bound, color=color, alpha=0.2, label=fill_label)
else:
ax.fill_between(x_list, lower_bound, upper_bound, color=color, alpha=0.2)
if legend and is_altitudinal:
if legend:
min, max = ax.get_ylim()
ax.set_ylim([min, 2 * max])
size = 15 if legend_line else 11
......
......@@ -124,8 +124,8 @@ 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 selected models', 'Temporally non-stationary models',
'Temporally non-stationary models which are significant']
labels = ['All massifs', 'Massifs with a selected model temporally non-stationary',
'Massifs with a selected model temporally non-stationary and significant']
colors = ['darkgreen', 'forestgreen', 'limegreen']
nb_massifs = [len(v.get_valid_names(massif_names)) for v in visualizer_list]
......@@ -137,6 +137,16 @@ def plot_shoe_plot_changes_against_altitude(massif_names, visualizer_list: List[
labelsize = 10
linewidth = 3
# x = np.array([4 * width * (i + 1) for i in range(len(nb_massifs))])
# for j, (changes, label, color) in enumerate(list(zip(all_changes, labels, colors)), -1):
# positions = x + j * width
# bplot = ax.boxplot(list(changes), positions=positions, widths=width, patch_artist=True, showmeans=True)
# for patch in bplot['boxes']:
# patch.set_facecolor(color)
# x = np.array([3 * width * (i + 1) for i in range(len(nb_massifs))])
# for j, (changes, label, color) in list(enumerate(list(zip(all_changes, labels, colors)), -1))[1:]:
# positions = x + (j + 0.5) * width
x = np.array([4 * width * (i + 1) for i in range(len(nb_massifs))])
for j, (changes, label, color) in enumerate(list(zip(all_changes, labels, colors)), -1):
positions = x + j * width
......@@ -145,12 +155,12 @@ 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]
loc = 'lower right' if relative else 'upper left'
loc = 'upper left'
ax.legend(custom_lines, labels, loc=loc)
start = 'Relative changes' if relative else 'Changes'
unit = '\%' if relative else visualizer.study.variable_unit
ax.set_ylabel('{} of {}-year return levels between 1969 and 2019 ({})'.format(start, OneFoldFit.return_period,
ax.set_ylabel('{} of {}-year return levels between 1959 and 2019 ({})'.format(start, OneFoldFit.return_period,
unit),
fontsize=legend_fontsize)
ax.set_xlabel('Elevation', fontsize=legend_fontsize + 5)
......@@ -163,6 +173,9 @@ 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 = 30 if relative else 0
lim_down, lim_up = ax.get_ylim()
ax.set_ylim(lim_down, lim_up + upper_limit_for_legend)
# I could display the number of massif used to build each box plot.
# plot_nb_massif_on_upper_axis(ax, labelsize, legend_fontsize, nb_massifs, x)
......@@ -211,7 +224,7 @@ def plot_shoe_plot_changes_against_altitude_for_maxima_and_total(massif_names, v
start = 'Relative changes' if relative else 'Changes'
unit = '\%' if relative else visualizer.study.variable_unit
ax.set_ylabel('{} between 1969 and 2019 ({})'.format(start, unit),
ax.set_ylabel('{} between 1959 and 2019 ({})'.format(start, unit),
fontsize=legend_fontsize)
ax.set_xlabel('Elevation', fontsize=legend_fontsize)
ax.tick_params(axis='both', which='major', labelsize=labelsize)
......
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