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

[SCM] improve labels for the margin law visualizer in study_visualizer

parent d9c8629c
No related merge requests found
Showing with 26 additions and 7 deletions
+26 -7
......@@ -9,6 +9,7 @@ from netCDF4 import Dataset
from experiment.meteo_france_SCM_study.abstract_variable import AbstractVariable
from experiment.meteo_france_SCM_study.massif import safran_massif_names_from_datasets
from experiment.meteo_france_SCM_study.visualization.utils import get_km_formatter
from extreme_estimator.margin_fits.plot.create_shifted_cmap import get_color_rbga_shifted
from spatio_temporal_dataset.coordinates.abstract_coordinates import AbstractCoordinates
from spatio_temporal_dataset.coordinates.spatial_coordinates.abstract_spatial_coordinates import \
......@@ -171,7 +172,7 @@ class AbstractStudy(object):
coords_list = list(zip(*coords_list))
ax.plot(*coords_list, color='black')
# Potentially, fill the inside of the polygon with some color
if fill:
if fill and coordinate_id in self.coordinate_id_to_massif_name:
massif_name = self.coordinate_id_to_massif_name[coordinate_id]
fill_kwargs = massif_name_to_fill_kwargs[massif_name] if massif_name_to_fill_kwargs is not None else {}
ax.fill(*coords_list, **fill_kwargs)
......@@ -183,6 +184,11 @@ class AbstractStudy(object):
# ax.text(x, y, massif_name)
# Display the center of the massif
ax.scatter(self.massifs_coordinates.x_coordinates, self.massifs_coordinates.y_coordinates, s=1)
# Improve some explanation on the X axis and on the Y axis
ax.set_xlabel('Longitude (km)')
ax.xaxis.set_major_formatter(get_km_formatter())
ax.set_ylabel('Latitude (km)')
ax.yaxis.set_major_formatter(get_km_formatter())
# Display the name or value of the massif
if add_text:
for _, row in self.massifs_coordinates.df_all_coordinates.iterrows():
......
......@@ -49,15 +49,15 @@ def extended_visualization():
# study_visualizer.visualize_all_experimental_law()
def annual_mean_vizu_compare_durand_study(safran=True, take_mean_value=True):
def annual_mean_vizu_compare_durand_study(safran=True, take_mean_value=True, altitude=1800):
if safran:
for study_class in [SafranTotalPrecip, SafranRainfall, SafranSnowfall, SafranTemperature][2:3]:
study = study_class(altitude=1800, year_min=1958, year_max=2002)
study = study_class(altitude=altitude, year_min=1958, year_max=2002)
study_visualizer = StudyVisualizer(study)
study_visualizer.visualize_annual_mean_values(take_mean_value=True)
else:
for study_class in [CrocusSwe, CrocusDepth, CrocusDaysWithSnowOnGround][-1:]:
study = study_class(altitude=1800, year_min=1958, year_max=2005)
study = study_class(altitude=altitude, year_min=1958, year_max=2005)
study_visualizer = StudyVisualizer(study)
study_visualizer.visualize_annual_mean_values(take_mean_value=take_mean_value)
......@@ -90,7 +90,7 @@ def complete_analysis(only_first_one=False):
if __name__ == '__main__':
# annual_mean_vizu_compare_durand_study(safran=True, take_mean_value=True)
# annual_mean_vizu_compare_durand_study(safran=True, take_mean_value=True, altitude=2400)
normal_visualization()
# extended_visualization()
# complete_analysis()
......@@ -255,7 +255,7 @@ class StudyVisualizer(object):
@staticmethod
def clean_axes_write_title_on_the_left(axes, title):
for ax in axes:
for ax in axes[1:]:
ax.tick_params(axis=u'both', which=u'both', length=0)
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)
......@@ -266,7 +266,10 @@ class StudyVisualizer(object):
ax.set_aspect('equal')
ax0 = axes[0]
ax0.get_yaxis().set_visible(True)
ax0.set_ylabel(title)
sub_title = ax0.yaxis.get_label()
full_title = title + '\n\n' + sub_title._text
ax0.set_ylabel(full_title)
ax0.set_ylabel(full_title)
ax0.tick_params(axis=u'both', which=u'both', length=0)
def show_or_save_to_file(self):
......
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import matplotlib.ticker as tkr # has classes for tick-locating and -formatting
def plot_df(df: pd.DataFrame, ax=None, ylabel='Example plot', show=True, xlabel='Altitude (m)'):
......@@ -25,5 +26,14 @@ def example_plot_df():
plot_df(df)
def get_km_formatter():
# From: https://stackoverflow.com/questions/27575257/how-to-divide-ytics-to-a-certain-number-in-matplotlib
def numfmt(x, pos): # your custom formatter function: divide by 1000.0
s = '{}'.format(int(x / 1000.0))
return s
return tkr.FuncFormatter(numfmt) # create your custom formatter function
if __name__ == '__main__':
example_plot_df()
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