comparison_plot.py 2.13 KiB
import matplotlib.pyplot as plt
from typing import Dict

from matplotlib.lines import Line2D

from extreme_data.meteo_france_data.adamont_data.adamont_scenario import gcm_rcm_couple_to_color, gcm_rcm_couple_to_str
from projects.projected_snowfall.comparison_with_scm.comparison_historical_visualizer import \
    ComparisonHistoricalVisualizer


def individual_plot(visualizer: ComparisonHistoricalVisualizer):
    # visualizer.adamont_studies.plot_maxima_time_series_adamont(visualizer.massif_names, visualizer.scm_study)
    # visualizer.shoe_plot_bias_maxima_comparison()
    # for relative in [True, False]:
    #     visualizer.plot_map_with_the_bias_in_the_mean(relative)

    visualizer.plot_map_with_the_rank()
    # for plot_maxima in [True, False][:1]:
    #     visualizer.plot_comparison(plot_maxima)


def collective_plot(altitude_to_visualizer):
    # bias_of_the_mean_with_the_altitude(altitude_to_visualizer)
    pass


def bias_of_the_mean_with_the_altitude(altitude_to_visualizer: Dict[int, ComparisonHistoricalVisualizer]):
    visualizer = list(altitude_to_visualizer.values())[0]
    altitudes = list(altitude_to_visualizer.keys())
    for couple in visualizer.adamont_studies.gcm_rcm_couples:
        values = [v.gcm_rcm_couple_to_bias_list_in_the_mean_maxima[couple] for v in altitude_to_visualizer.values()]

        ax = plt.gca()
        width = 10
        positions = [i * width * 2 for i in range(len(values))]
        bplot = ax.boxplot(values, positions=positions, widths=width, patch_artist=True, showmeans=True)
        color = gcm_rcm_couple_to_color[couple]
        for patch in bplot['boxes']:
            patch.set_facecolor(color)

        couple_name = ' + '.join(couple)
        plot_name = 'Mean bias w.r.t to the reanalysis for {}'.format(couple_name)
        ax.set_ylabel(plot_name)
        ax.set_xlabel('Altitude')
        ax.set_xticklabels(altitudes)
        ax.set_xlim([min(positions) - width, max(positions) + width])
        visualizer.plot_name = 'altitude_comparison/{}'.format(plot_name)
        visualizer.show_or_save_to_file(add_classic_title=False, no_title=True, tight_layout=True)
        ax.clear()
        plt.close()