From d4e81cddc608c9201b7583ba7886a95948cd6bd4 Mon Sep 17 00:00:00 2001 From: Le Roux Erwan <erwan.le-roux@irstea.fr> Date: Mon, 18 Mar 2019 17:02:02 +0100 Subject: [PATCH] [SCM] improve labels for the margin law visualizer in study_visualizer --- experiment/meteo_france_SCM_study/abstract_study.py | 8 +++++++- .../study_visualization/main_study_visualizer.py | 8 ++++---- .../study_visualization/study_visualizer.py | 7 +++++-- .../meteo_france_SCM_study/visualization/utils.py | 10 ++++++++++ 4 files changed, 26 insertions(+), 7 deletions(-) diff --git a/experiment/meteo_france_SCM_study/abstract_study.py b/experiment/meteo_france_SCM_study/abstract_study.py index a23316fe..e46e3f62 100644 --- a/experiment/meteo_france_SCM_study/abstract_study.py +++ b/experiment/meteo_france_SCM_study/abstract_study.py @@ -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(): diff --git a/experiment/meteo_france_SCM_study/visualization/study_visualization/main_study_visualizer.py b/experiment/meteo_france_SCM_study/visualization/study_visualization/main_study_visualizer.py index 592a57eb..d03ff3df 100644 --- a/experiment/meteo_france_SCM_study/visualization/study_visualization/main_study_visualizer.py +++ b/experiment/meteo_france_SCM_study/visualization/study_visualization/main_study_visualizer.py @@ -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() diff --git a/experiment/meteo_france_SCM_study/visualization/study_visualization/study_visualizer.py b/experiment/meteo_france_SCM_study/visualization/study_visualization/study_visualizer.py index 50121a0f..d39d41ab 100644 --- a/experiment/meteo_france_SCM_study/visualization/study_visualization/study_visualizer.py +++ b/experiment/meteo_france_SCM_study/visualization/study_visualization/study_visualizer.py @@ -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): diff --git a/experiment/meteo_france_SCM_study/visualization/utils.py b/experiment/meteo_france_SCM_study/visualization/utils.py index 1a0e4532..970c2aa8 100644 --- a/experiment/meteo_france_SCM_study/visualization/utils.py +++ b/experiment/meteo_france_SCM_study/visualization/utils.py @@ -1,6 +1,7 @@ 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() -- GitLab