diff --git a/projects/projected_snowfall/comparison_with_scm/main_comparison_histo.py b/projects/projected_snowfall/comparison_with_scm/main_comparison_histo.py new file mode 100644 index 0000000000000000000000000000000000000000..22515e119a39b955d79b4b028a1762862b103fb5 --- /dev/null +++ b/projects/projected_snowfall/comparison_with_scm/main_comparison_histo.py @@ -0,0 +1,47 @@ +import numpy as np +import matplotlib +matplotlib.use('Agg') + +import matplotlib.pyplot as plt +from extreme_data.meteo_france_data.scm_models_data.safran.gap_between_study import GapBetweenSafranSnowfall2019And2020, \ + GapBetweenSafranSnowfall2019AndMySafranSnowfall2019Recentered, GapBetweenSafranSnowfall2019AndMySafranSnowfall2019 +from extreme_data.meteo_france_data.scm_models_data.visualization.main_study_visualizer import \ + STUDY_CLASS_TO_ABBREVIATION +from projects.altitude_spatial_model.altitudes_fit.altitudes_studies import AltitudesStudies + + +def comparison_plot(altitude_studies: AltitudesStudies, massif_name): + ax = plt.gca() + altitudes = [a for a, s in altitude_studies.altitude_to_study.items() if massif_name in s.study_massif_names] + annual_maxima = [altitude_studies.altitude_to_study[a].massif_name_to_annual_maxima[massif_name] for a in altitudes] + min_bias, mean_bias, max_bias = [[f(maxima) for maxima in annual_maxima] for f in [np.min, np.mean, np.max]] + + color = 'blue' + ax.plot(mean_bias, altitudes, label='Mean bias', color=color, marker='o') + ax.fill_betweenx(altitudes, min_bias, max_bias, label='Range for the bias', alpha=0.2, color=color) + ax.vlines(0, ymin=altitudes[0], ymax=altitudes[-1], color='k') + massif_name_str = massif_name.replace('_', '-') + study_str = STUDY_CLASS_TO_ABBREVIATION[type(altitude_studies.study)] + plot_name = '{} - Bias between of {}'.format(massif_name_str, study_str) + plot_name += '\nWe consider maxima between {} and {}'.format(altitude_studies.study.year_min, + altitude_studies.study.year_max) + ax.yaxis.set_ticks(altitudes) + ax.set_ylim(top=altitudes[-1] + 500) + ax.legend() + altitude_studies.show_or_save_to_file(plot_name=plot_name) + plt.close() + + +def main_comparaison_plot(): + altitudes = [600, 900, 1200, 1500, 1800, 2100, 2400, 2700, 3000, 3300, 3600] + for study_class in [GapBetweenSafranSnowfall2019AndMySafranSnowfall2019Recentered, + GapBetweenSafranSnowfall2019AndMySafranSnowfall2019, + GapBetweenSafranSnowfall2019And2020]: + altitude_studies = AltitudesStudies(study_class=study_class, + altitudes=altitudes) + for massif_name in altitude_studies.study.all_massif_names(): + comparison_plot(altitude_studies, massif_name) + + +if __name__ == '__main__': + main_comparaison_plot()