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

[contrasting v2] download_adamont.py all studies. Lower a bit the text for...

[contrasting v2] download_adamont.py all studies. Lower a bit the text for some massif. files are by default generated in svg from now on.
change group -> range. remove the elevation 3900 from the high-elevation range.
parent 36d76e17
No related merge requests found
Showing with 315 additions and 42 deletions
+315 -42
...@@ -499,8 +499,18 @@ class AbstractStudy(object): ...@@ -499,8 +499,18 @@ class AbstractStudy(object):
# Coordinate object that represents the massif coordinates in Lambert extended # Coordinate object that represents the massif coordinates in Lambert extended
# extracted for a csv file, and used only for display purposes # extracted for a csv file, and used only for display purposes
df = cls.load_df_centroid() df = cls.load_df_centroid()
# Lower a bit the Mercantour massif
df.loc['Mercantour', 'coord_x'] += 14000 # shift to the right
df.loc['Mercantour', 'coord_y'] -= 7000 # shift down
# Lower a bit the Maurienne massif
# df.loc['Mercantour', 'coord_x'] += 14000 # shift to the right
df.loc['Maurienne', 'coord_y'] -= 6000 # shift down
df.loc['Vanoise', 'coord_y'] -= 4000 # shift down
df.loc['Ubaye', 'coord_y'] -= 4000 # shift down
# Filter, keep massifs present at the altitude of interest # Filter, keep massifs present at the altitude of interest
df = df.loc[massif_names, :] df = df.loc[massif_names, :]
# Build coordinate object from df_centroid # Build coordinate object from df_centroid
return AbstractSpatialCoordinates.from_df(df) return AbstractSpatialCoordinates.from_df(df)
......
...@@ -571,8 +571,9 @@ class StudyVisualizer(VisualizationParameters): ...@@ -571,8 +571,9 @@ class StudyVisualizer(VisualizationParameters):
self.savefig_in_results(filename, dpi=dpi) self.savefig_in_results(filename, dpi=dpi)
@classmethod @classmethod
def savefig_in_results(cls, filename, dpi=None): def savefig_in_results(cls, filename, dpi=None, format='svg'):
filepath = op.join(AbstractStudy.result_full_path, filename + '.png') assert format in ['png', 'svg']
filepath = op.join(AbstractStudy.result_full_path, filename + '.' + format)
dirname = op.dirname(filepath) dirname = op.dirname(filepath)
if not op.exists(dirname): if not op.exists(dirname):
os.makedirs(dirname, exist_ok=True) os.makedirs(dirname, exist_ok=True)
......
...@@ -134,13 +134,18 @@ class AltitudesStudies(object): ...@@ -134,13 +134,18 @@ class AltitudesStudies(object):
y = study.massif_name_to_annual_maxima[massif_name] y = study.massif_name_to_annual_maxima[massif_name]
label = '{} m'.format(altitude) label = '{} m'.format(altitude)
ax.plot(x, y, linewidth=2, label=label) ax.plot(x, y, linewidth=2, label=label)
ax.xaxis.set_ticks(x[1::10]) ax.xaxis.set_ticks(x[11::20])
ax.tick_params(axis='both', which='major', labelsize=13)
# Plot for the paper 2
if massif_name == "Vanoise":
ax.yaxis.set_ticks([25 * (j) for j in range(6)])
ax.tick_params(axis='both', which='major', labelsize=20)
handles, labels = ax.get_legend_handles_labels() handles, labels = ax.get_legend_handles_labels()
ax.legend(handles[::-1], labels[::-1]) ax.legend(handles[::-1], labels[::-1])
plot_name = 'Annual maxima of {} in {}'.format(SCM_STUDY_CLASS_TO_ABBREVIATION[self.study_class], plot_name = 'Annual maxima of {} in {}'.format(SCM_STUDY_CLASS_TO_ABBREVIATION[self.study_class],
massif_name.replace('_', ' ')) massif_name.replace('_', ' '))
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)
plot_name = 'time series/' + plot_name plot_name = 'time series/' + plot_name
self.show_or_save_to_file(plot_name=plot_name, show=show, no_title=True, tight_layout=True) self.show_or_save_to_file(plot_name=plot_name, show=show, no_title=True, tight_layout=True)
......
...@@ -2,10 +2,10 @@ from enum import Enum ...@@ -2,10 +2,10 @@ from enum import Enum
# The order is important # The order is important
altitudes_for_groups = [ altitudes_for_groups = [
[300, 600, 900][1:], [600, 900],
[1200, 1500, 1800], [1200, 1500, 1800],
[2100, 2400, 2700], [2100, 2400, 2700],
[3000, 3300, 3600, 3900] [3000, 3300, 3600]
] ]
...@@ -26,7 +26,7 @@ class AbstractAltitudeGroup(object): ...@@ -26,7 +26,7 @@ class AbstractAltitudeGroup(object):
@property @property
def xlabel(self): def xlabel(self):
return 'Elevation = {} m. Models are estimated with\n' \ return 'Elevation = {} m. Models are estimated with\n' \
'maxima from group {}, i.e. {}'.format(self.reference_altitude, self.group_id, self.formula) 'maxima from range {}, i.e. {}'.format(self.reference_altitude, self.group_id, self.formula)
@property @property
def formula(self): def formula(self):
......
...@@ -155,7 +155,7 @@ class AltitudesStudiesVisualizerForNonStationaryModels(StudyVisualizer): ...@@ -155,7 +155,7 @@ class AltitudesStudiesVisualizerForNonStationaryModels(StudyVisualizer):
if is_return_level_plot: if is_return_level_plot:
add_colorbar = True add_colorbar = True
max_abs_change = None max_abs_change = None
massif_name_to_text = None massif_name_to_text = {m: round(v) for m, v in massif_name_to_value.items()}
graduation = self.altitude_group.graduation_for_return_level graduation = self.altitude_group.graduation_for_return_level
fontsize_label = 17 fontsize_label = 17
else: else:
......
...@@ -10,7 +10,6 @@ from projects.altitude_spatial_model.altitudes_fit.one_fold_analysis.one_fold_fi ...@@ -10,7 +10,6 @@ from projects.altitude_spatial_model.altitudes_fit.one_fold_analysis.one_fold_fi
def plot_coherence_curves(massif_names, visualizer_list: List[AltitudesStudiesVisualizerForNonStationaryModels]): def plot_coherence_curves(massif_names, visualizer_list: List[AltitudesStudiesVisualizerForNonStationaryModels]):
folder = 'Coherence' folder = 'Coherence'
visualizer = visualizer_list[0] visualizer = visualizer_list[0]
names = visualizer.get_valid_names(massif_names)
all_valid_names = set.union(*[v.get_valid_names(massif_names) for v in visualizer_list]) all_valid_names = set.union(*[v.get_valid_names(massif_names) for v in visualizer_list])
for massif_name in all_valid_names: for massif_name in all_valid_names:
......
...@@ -100,7 +100,7 @@ def plot_histogram_all_trends_against_altitudes(massif_names, visualizer_list: L ...@@ -100,7 +100,7 @@ def plot_histogram_all_trends_against_altitudes(massif_names, visualizer_list: L
linewidth=linewidth) linewidth=linewidth)
ax.legend(loc='upper left', prop={'size': size}) ax.legend(loc='upper left', prop={'size': size})
ax.set_ylabel('Percentage of massifs (\%) ', fontsize=legend_fontsize) ax.set_ylabel('Percentage of massifs (\%) ', fontsize=legend_fontsize)
ax.set_xlabel('Elevation group', fontsize=legend_fontsize) ax.set_xlabel('Elevation range', fontsize=legend_fontsize)
ax.tick_params(axis='both', which='major', labelsize=labelsize) ax.tick_params(axis='both', which='major', labelsize=labelsize)
ax.set_xticks(x) ax.set_xticks(x)
ax.yaxis.grid() ax.yaxis.grid()
...@@ -122,7 +122,7 @@ def plot_shoe_plot_changes_against_altitude(massif_names, visualizer_list: List[ ...@@ -122,7 +122,7 @@ 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 = [v.all_changes(massif_names, relative=relative) for v in visualizer_list]
all_changes = list(zip(*all_changes)) all_changes = list(zip(*all_changes))
labels = ['All models', 'Temporally non-stationary models', labels = ['All selected models', 'Temporally non-stationary models',
'Temporally non-stationary models which are significant'] 'Temporally non-stationary models which are significant']
colors = ['darkgreen', 'forestgreen', 'limegreen'] colors = ['darkgreen', 'forestgreen', 'limegreen']
nb_massifs = [len(v.get_valid_names(massif_names)) for v in visualizer_list] nb_massifs = [len(v.get_valid_names(massif_names)) for v in visualizer_list]
......
import matplotlib.pyplot as plt import matplotlib.pyplot as plt
from itertools import chain
import numpy as np import numpy as np
from cached_property import cached_property from cached_property import cached_property
...@@ -7,6 +9,7 @@ from extreme_data.meteo_france_data.scm_models_data.visualization.plot_utils imp ...@@ -7,6 +9,7 @@ from extreme_data.meteo_france_data.scm_models_data.visualization.plot_utils imp
from extreme_data.meteo_france_data.scm_models_data.visualization.study_visualizer import StudyVisualizer from extreme_data.meteo_france_data.scm_models_data.visualization.study_visualizer import StudyVisualizer
from extreme_fit.distribution.gev.gev_params import GevParams from extreme_fit.distribution.gev.gev_params import GevParams
from projects.altitude_spatial_model.altitudes_fit.altitudes_studies import AltitudesStudies from projects.altitude_spatial_model.altitudes_fit.altitudes_studies import AltitudesStudies
from projects.altitude_spatial_model.altitudes_fit.one_fold_analysis.altitude_group import altitudes_for_groups
from projects.contrasting_trends_in_snow_loads.article2_snowfall_versus_time_and_altitude.snowfall_plot import \ from projects.contrasting_trends_in_snow_loads.article2_snowfall_versus_time_and_altitude.snowfall_plot import \
fit_linear_regression fit_linear_regression
from projects.exceeding_snow_loads.utils import paper_altitudes from projects.exceeding_snow_loads.utils import paper_altitudes
...@@ -256,8 +259,8 @@ class PointwiseGevStudyVisualizer(AltitudesStudies): ...@@ -256,8 +259,8 @@ class PointwiseGevStudyVisualizer(AltitudesStudies):
if __name__ == '__main__': if __name__ == '__main__':
altitudes = [900, 1200, 1500, 1800, 2100, 2400, 2700, 3000, 3300] altitudes = list(chain.from_iterable(altitudes_for_groups))
altitudes = [600, 900, 1200, 1500, 1800, 2100, 2400, 2700, 3000, 3300, 3600, 3900]
# altitudes = paper_altitudes # altitudes = paper_altitudes
# altitudes = [1800, 2100] # altitudes = [1800, 2100]
visualizer = PointwiseGevStudyVisualizer(SafranSnowfall1Day, altitudes=altitudes) visualizer = PointwiseGevStudyVisualizer(SafranSnowfall1Day, altitudes=altitudes)
......
...@@ -18,19 +18,18 @@ from projects.projected_snowfall.comparison_with_scm.comparison_historical_visua ...@@ -18,19 +18,18 @@ from projects.projected_snowfall.comparison_with_scm.comparison_historical_visua
def main(): def main():
fast = False fast = True
adamont_scenario = AdamontScenario.rcp85
year_min = 1982 if adamont_scenario is AdamontScenario.rcp85_extended else 2006
# Set the year_min and year_max for the comparison # Set the year_min and year_max for the comparison
if fast: if fast:
year_min = [2006][0]
year_max = [2030][0] year_max = [2030][0]
massif_names = ['Vanoise'] massif_names = ['Vanoise']
altitudes = [1800] altitudes = [1800]
else: else:
year_min = [2006][0]
year_max = [2100][0] year_max = [2100][0]
massif_names = None massif_names = None
altitudes = [900, 1800, 2700, 3600][2:] altitudes = [900, 1800, 2700, 3600][2:]
adamont_scenario = AdamontScenario.rcp85
# Load studies # Load studies
for altitude in altitudes: for altitude in altitudes:
......
...@@ -67,6 +67,24 @@ class TestSCMAllStudy(unittest.TestCase): ...@@ -67,6 +67,24 @@ class TestSCMAllStudy(unittest.TestCase):
_ = study.year_to_annual_maxima[1959] _ = study.year_to_annual_maxima[1959]
self.assertTrue(True) self.assertTrue(True)
def test_study_visualization(self):
year = 2019
study = SafranSnowfall(altitude=900, year_min=year, year_max=year)
massif_to_value = {m: a[0] for m, a in study.massif_name_to_annual_maxima.items()}
values = list(massif_to_value.values())
vmin, vmax = min(values), max(values)
massif_to_text = {m: round(a) for m, a in massif_to_value.items()}
# study.visualize_study(massif_name_to_value=massif_to_value,
# massif_name_to_text=massif_to_text,
# add_text=True,
# add_colorbar=True,
# vmin=vmin, vmax=vmax,
# show=False)
self.assertTrue(True)
class TestSCMSafranNormalizedPrecipitationRateOnWetDays(unittest.TestCase): class TestSCMSafranNormalizedPrecipitationRateOnWetDays(unittest.TestCase):
......
import unittest
from extreme_data.meteo_france_data.scm_models_data.visualization.main_study_visualizer import \
SCM_STUDY_CLASS_TO_ABBREVIATION
class TestVisualization(unittest.TestCase):
pass
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