Commit 44f8eb9d authored by Le Roux Erwan's avatar Le Roux Erwan
Browse files

[paper 1] add error bars to uncertainty plot. add time series of maxima curve...

[paper 1] add error bars to uncertainty plot. add time series of maxima curve plot for 600m increasing case. add colorbar when necesasry for the trend plot.
parent b081c3ec
No related merge requests found
Showing with 47 additions and 31 deletions
+47 -31
...@@ -28,6 +28,6 @@ if __name__ == '__main__': ...@@ -28,6 +28,6 @@ if __name__ == '__main__':
# main_shape_repartition([900], save_to_file=False) # main_shape_repartition([900], save_to_file=False)
# main_shape_repartition([900, 1800, 2700]) # main_shape_repartition([900, 1800, 2700])
# main_shape_repartition([300, 600, 900, 1200, 1500, 1800, 2700]) # main_shape_repartition([300, 600, 900, 1200, 1500, 1800, 2700])
# main_shape_repartition([900], study_visualizer_class=StudyVisualizerForShape, save_to_file=False) main_shape_repartition([900, 1800, 2700], study_visualizer_class=StudyVisualizerForShape, save_to_file=True)
main_shape_repartition([300, 600, 900, 1200, 1500, 1800, 2100, 2400, 2700, 3000, 3300, 3600, 3900, 4200], # main_shape_repartition([300, 600, 900, 1200, 1500, 1800, 2100, 2400, 2700, 3000, 3300, 3600, 3900, 4200],
study_visualizer_class=StudyVisualizerForShape, save_to_file=True) # study_visualizer_class=StudyVisualizerForShape, save_to_file=True)
...@@ -7,12 +7,6 @@ from experiment.meteo_france_data.scm_models_data.visualization.study_visualizat ...@@ -7,12 +7,6 @@ from experiment.meteo_france_data.scm_models_data.visualization.study_visualizat
StudyVisualizer StudyVisualizer
from experiment.paper_past_snow_loads.paper_utils import dpi_paper1_figure from experiment.paper_past_snow_loads.paper_utils import dpi_paper1_figure
marker_altitude_massif_name_for_paper1 = [
('magenta', 900, 'Ubaye'),
('darkmagenta', 1800, 'Vercors'),
('mediumpurple', 2700, 'Beaufortain'),
]
def max_graph_annual_maxima_poster(): def max_graph_annual_maxima_poster():
""" """
...@@ -22,17 +16,31 @@ def max_graph_annual_maxima_poster(): ...@@ -22,17 +16,31 @@ def max_graph_annual_maxima_poster():
""" """
save_to_file = True save_to_file = True
study_class = CrocusSnowLoadTotal study_class = CrocusSnowLoadTotal
examples_for_the_paper = True
ax = plt.gca() ax = plt.gca()
ax.set_ylim([0, 20])
ax.set_yticks(list(range(0, 21, 2))) if examples_for_the_paper:
for color, altitude, massif_name in marker_altitude_massif_name_for_paper1: ax.set_ylim([0, 20])
ax.set_yticks(list(range(0, 21, 2)))
marker_altitude_massif_name_for_paper1 = [
('magenta', 900, 'Ubaye'),
('darkmagenta', 1800, 'Vercors'),
('mediumpurple', 2700, 'Beaufortain'),
]
else:
marker_altitude_massif_name_for_paper1 = [
('yellow', 600, 'Ubaye'),
('purple', 600, 'Parpaillon'),
]
for color, altitude, massif_name in marker_altitude_massif_name_for_paper1[::-1]:
for study in study_iterator_global([study_class], altitudes=[altitude]): for study in study_iterator_global([study_class], altitudes=[altitude]):
study_visualizer = StudyVisualizer(study, save_to_file=save_to_file, study_visualizer = StudyVisualizer(study, save_to_file=save_to_file,
verbose=True, verbose=True,
multiprocessing=True) multiprocessing=True)
snow_abbreviation = SCM_STUDY_CLASS_TO_ABBREVIATION[study_class] snow_abbreviation = SCM_STUDY_CLASS_TO_ABBREVIATION[study_class]
last_plot = altitude == 2700 last_plot = massif_name == "Ubaye"
label = '{} massif at {}m'.format(massif_name, altitude) label = '{} massif at {}m'.format(massif_name, altitude)
tight_pad = {'h_pad': 0.2} tight_pad = {'h_pad': 0.2}
study_visualizer.visualize_max_graphs_poster(massif_name, altitude, snow_abbreviation, color, label, study_visualizer.visualize_max_graphs_poster(massif_name, altitude, snow_abbreviation, color, label,
......
...@@ -13,7 +13,8 @@ def load_altitude_to_visualizer(altitudes, massif_names, model_subsets_for_uncer ...@@ -13,7 +13,8 @@ def load_altitude_to_visualizer(altitudes, massif_names, model_subsets_for_uncer
save_to_file=True): save_to_file=True):
fit_method = TemporalMarginFitMethod.extremes_fevd_mle fit_method = TemporalMarginFitMethod.extremes_fevd_mle
select_only_acceptable_shape_parameter = True select_only_acceptable_shape_parameter = True
print('Fit method: {}, Select shape parameter: {}'.format(fit_method, select_only_acceptable_shape_parameter)) print('Fit method: {}, Select only acceptable shape parameter: {}'
.format(fit_method, select_only_acceptable_shape_parameter))
altitude_to_visualizer = OrderedDict() altitude_to_visualizer = OrderedDict()
for altitude in altitudes: for altitude in altitudes:
altitude_to_visualizer[altitude] = study_visualizer_class( altitude_to_visualizer[altitude] = study_visualizer_class(
......
...@@ -2,9 +2,12 @@ from enum import Enum ...@@ -2,9 +2,12 @@ from enum import Enum
from experiment.meteo_france_data.scm_models_data.crocus.crocus import CrocusSnowLoadTotal, CrocusSnowLoadEurocode, \ from experiment.meteo_france_data.scm_models_data.crocus.crocus import CrocusSnowLoadTotal, CrocusSnowLoadEurocode, \
CrocusSnowLoad3Days CrocusSnowLoad3Days
from experiment.meteo_france_data.scm_models_data.visualization.study_visualization.main_study_visualizer import \
ALL_ALTITUDES_WITHOUT_NAN
from root_utils import get_display_name_from_object_type from root_utils import get_display_name_from_object_type
paper_altitudes = [300, 600, 900, 1200, 1500, 1800, 2100, 2400, 2700] # paper_altitudes = [300, 600, 900, 1200, 1500, 1800, 2100, 2400, 2700]
paper_altitudes = ALL_ALTITUDES_WITHOUT_NAN
paper_study_classes = [CrocusSnowLoadTotal, CrocusSnowLoadEurocode, CrocusSnowLoad3Days] paper_study_classes = [CrocusSnowLoadTotal, CrocusSnowLoadEurocode, CrocusSnowLoad3Days]
# dpi_paper1_figure = 700 # dpi_paper1_figure = 700
dpi_paper1_figure = None dpi_paper1_figure = None
......
...@@ -63,15 +63,17 @@ def intermediate_result(altitudes, massif_names=None, ...@@ -63,15 +63,17 @@ def intermediate_result(altitudes, massif_names=None,
for visualizer in visualizers: for visualizer in visualizers:
_ = compute_minimized_aic(visualizer) _ = compute_minimized_aic(visualizer)
# Compute common max value for the colorbar # Compute common max value for the colorbar
altitudes_for_plot_trend = [900, 1800, 2700] max_abs_tdrl = max([visualizer.max_abs_change for altitude, visualizer in altitude_to_visualizer.items()
altitudes_for_plot_trend = altitudes if altitude >= 900])
visualizers_for_altitudes = [visualizer for altitude, visualizer in altitude_to_visualizer.items():
for altitude, visualizer in altitude_to_visualizer.items() if 900 <= altitude <= 4200:
if altitude in altitudes_for_plot_trend] add_color = (visualizer.study.altitude - 1500) % 900 == 0
max_abs_tdrl = max([visualizer.max_abs_change for visualizer in visualizers_for_altitudes]) visualizer.plot_trends(max_abs_tdrl, add_colorbar=add_color)
for visualizer in visualizers_for_altitudes: # Plot 2700 also with a colorbar
# visualizer.plot_trends(max_abs_tdrl, add_colorbar=visualizer.study.altitude == 2700) if altitude == 2700:
visualizer.plot_trends(None, add_colorbar=True) visualizer.plot_trends(max_abs_tdrl, add_colorbar=True)
else:
visualizer.plot_trends(None, add_colorbar=True)
# Plot graph # Plot graph
plot_uncertainty_massifs(altitude_to_visualizer) plot_uncertainty_massifs(altitude_to_visualizer)
...@@ -84,11 +86,11 @@ def major_result(): ...@@ -84,11 +86,11 @@ def major_result():
ConfidenceIntervalMethodFromExtremes.ci_mle][1:] ConfidenceIntervalMethodFromExtremes.ci_mle][1:]
massif_names = None massif_names = None
study_classes = paper_study_classes[:2] study_classes = paper_study_classes[:2]
model_subsets_for_uncertainty = [ModelSubsetForUncertainty.stationary_gumbel, # model_subsets_for_uncertainty = [ModelSubsetForUncertainty.stationary_gumbel,
ModelSubsetForUncertainty.stationary_gumbel_and_gev, # ModelSubsetForUncertainty.stationary_gumbel_and_gev,
ModelSubsetForUncertainty.non_stationary_gumbel, # ModelSubsetForUncertainty.non_stationary_gumbel,
ModelSubsetForUncertainty.non_stationary_gumbel_and_gev] # ModelSubsetForUncertainty.non_stationary_gumbel_and_gev]
# model_subsets_for_uncertainty = None model_subsets_for_uncertainty = None
# study_classes = [CrocusSnowLoad3Days, CrocusSnowLoad5Days, CrocusSnowLoad7Days][::-1] # study_classes = [CrocusSnowLoad3Days, CrocusSnowLoad5Days, CrocusSnowLoad7Days][::-1]
for study_class in study_classes: for study_class in study_classes:
intermediate_result(paper_altitudes, massif_names, model_subsets_for_uncertainty, intermediate_result(paper_altitudes, massif_names, model_subsets_for_uncertainty,
...@@ -100,7 +102,6 @@ if __name__ == '__main__': ...@@ -100,7 +102,6 @@ if __name__ == '__main__':
# intermediate_result(altitudes=[900, 1200], massif_names=['Vercors'], # intermediate_result(altitudes=[900, 1200], massif_names=['Vercors'],
# uncertainty_methods=[ConfidenceIntervalMethodFromExtremes.my_bayes, # uncertainty_methods=[ConfidenceIntervalMethodFromExtremes.my_bayes,
# ConfidenceIntervalMethodFromExtremes.ci_mle][1:], # ConfidenceIntervalMethodFromExtremes.ci_mle][1:],
# non_stationary_uncertainty=[False, True][1:],
# multiprocessing=True) # multiprocessing=True)
# intermediate_result(altitudes=[900, 1200], massif_names=['Maurienne'], # intermediate_result(altitudes=[900, 1200], massif_names=['Maurienne'],
# uncertainty_methods=[ConfidenceIntervalMethodFromExtremes.my_bayes, # uncertainty_methods=[ConfidenceIntervalMethodFromExtremes.my_bayes,
......
...@@ -203,4 +203,7 @@ def plot_valid_return_level_uncertainties(alpha, altitude_to_visualizer, altitud ...@@ -203,4 +203,7 @@ def plot_valid_return_level_uncertainties(alpha, altitude_to_visualizer, altitud
confidence_interval_str += '\% confidence interval' confidence_interval_str += '\% confidence interval'
ax.fill_between(valid_altitudes, lower_bound, upper_bound, color=color, alpha=alpha, ax.fill_between(valid_altitudes, lower_bound, upper_bound, color=color, alpha=alpha,
label=label_name + confidence_interval_str) label=label_name + confidence_interval_str)
# Plot error bars
yerr = np.array([[d[1] - d[0], d[2] - d[1]] for d in zip(lower_bound, mean, upper_bound)]).transpose()
ax.bar(valid_altitudes, mean, ecolor='black', capsize=5, yerr=yerr)
return valid_altitudes return valid_altitudes
...@@ -190,7 +190,7 @@ class StudyVisualizerForNonStationaryTrends(StudyVisualizer): ...@@ -190,7 +190,7 @@ class StudyVisualizerForNonStationaryTrends(StudyVisualizer):
ax.get_xaxis().set_visible(True) ax.get_xaxis().set_visible(True)
ax.set_xticks([]) ax.set_xticks([])
ax.set_xlabel('Altitude = {}m'.format(self.study.altitude), fontsize=15) ax.set_xlabel('Altitude = {}m'.format(self.study.altitude), fontsize=15)
self.plot_name = 'tdlr_trends' self.plot_name = 'tdlr_trends_w' + 'o' if not add_colorbar else '' + '_colorbar'
self.show_or_save_to_file(add_classic_title=False, tight_layout=True, no_title=True, self.show_or_save_to_file(add_classic_title=False, tight_layout=True, no_title=True,
dpi=500) dpi=500)
plt.close() plt.close()
......
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