def plot_pred(date, time, fti, target, **kwargs): """Worker func for plotting ML predictions""" examples = kwargs['examples'] info = kwargs['info'] time_marker = 'first_hour' if fti <= 12 else 'second_hour' rng = np.arange(0., 0.55, 0.05) if 'torn' in target else np.arange( 0., 1.1, 0.1) kwargs = {'alpha': 0.95, 'extend': 'neither', 'cmap': target_cmap[target]} plt = Plotting(date=None, z1_levels=rng, z2_levels=[35, 60], z3_levels=[35., 60], z4_levels=[prob_threshold[target], 90.], z4_color='k', **kwargs) n_panels = 2 fig, axes, = plt._create_fig( fig_num=0, sub_plots=(2, 1), plot_map=False, figsize=(7, 6), hspace=0.15, wspace=0.15, ) map_axes, x, y = plt._generate_base_map(axes=axes, date=date, fig=fig) valid_date_and_time, initial_date_and_time = get_time.determine_forecast_valid_datetime( date_dir=str(date), time_dir=time, fcst_time_idx=fti) try: mrms_dbz = mrms.load_single_mrms_time( date_dir=date, valid_datetime=valid_date_and_time, var_name='DZ_CRESSMAN') except: return None try: ens_data = EnsembleData(date_dir=date, time_dir=time, base_path='summary_files') data = ens_data.load(variables=['comp_dz'], time_indexs=[fti], tag='ENS') except: return None wofs_dbz = data['comp_dz'].values[0] wofs_dbz = prob_match_mean(var=wofs_dbz, mean_var=np.mean(wofs_dbz, axis=0), neighborhood=15) init_time_str, valid_time_str = get_timestampes(initial_date_and_time, valid_date_and_time) load_lsr = loadLSR(date_dir=date, date=valid_date_and_time[0], time=valid_date_and_time[1], forecast_length=30) load_wwa = loadWWA(date_dir=date, date=valid_date_and_time[0], time=valid_date_and_time[1], forecast_length=30, time_window=30) hail_ll = load_lsr.load_hail_reports() torn_ll = load_lsr.load_tornado_reports() wind_ll = load_lsr.load_wind_reports() lsr_points = {'hail': hail_ll, 'tornado': torn_ll, 'wind': wind_ll} torn_wwa = load_wwa.load_tornado_warning_polygon(return_polygons=True) wwa_points = {'tornado': torn_wwa} ml_preds, objects = load_ml_predictions(time_marker, target, date, time, fti, model_names=['LogisticRegression'], examples=examples, info=info) baseline_pred = load_baseline(date, time, fti, target, time_marker) ml_preds, objects = smooth_objects(objects, ml_preds, model_names=['LogisticRegression']) if baseline_pred is None or ml_preds is None: return None all_preds = ml_preds + [baseline_pred] titles = ['LogisticRegression', baseline_names[target]] for j, forecast_probabilities in enumerate(all_preds): ax = axes.flat[j] if np.amax(forecast_probabilities.astype(float) * 100.) > prob_threshold[target]: z4 = forecast_probabilities.astype(float) * 100. else: z4 = None ###wwa_points=wwa_points, contours = plt.spatial_plotting( fig, ax, x, y, lsr_points=lsr_points, z1=np.ma.masked_where(forecast_probabilities == 0., forecast_probabilities), z2=mrms_dbz, z3=wofs_dbz, z4=z4, map_ax=map_axes[j], ) ax.set_title(titles[j], fontsize=12, pad=1.0, alpha=0.8) label_centroid(objects[0], forecast_probabilities, ax) axes.flat[0].text( 0.0, 1.17, f'Init Time : {init_time_str}', fontsize=8, alpha=0.9, transform=axes.flat[0].transAxes, ) axes.flat[0].text(0.0, 1.12, f'Valid Time : {valid_time_str}', fontsize=8, alpha=0.9, transform=axes.flat[0].transAxes) base_plot.add_alphabet_label(n_panels, axes, pos=(0.9, 0.08)) additional_handles = [ Line2D([0], [0], marker='o', color='w', markerfacecolor='r', markersize=6, alpha=0.8), Line2D([0], [0], marker='o', color='w', markerfacecolor='b', markersize=6, alpha=0.8), Line2D([0], [0], marker='o', color='w', markerfacecolor='g', markersize=6, alpha=0.8), Line2D([0], [0], color='b', alpha=0.8), Line2D([0], [0], color='k', alpha=0.8), ] additional_labels = [ 'Tornado', 'Severe Wind', 'Severe Hail', 'WoFS PMM DBZ > 35', 'MRMS DBZ > 35' ] major_ax = base_plot.set_major_axis_labels(fig, xlabel='', ylabel_left='', labelpad=5) #base_plot.set_legend(n_panels, fig, axes[0,0], major_ax, additional_handles, additional_labels, bbox_to_anchor=(0.425, -0.375), ncol=2) colorbar_labels = { 'tornado': 'Probability of Tornado', 'severe_hail': 'Probability of Severe Hail', 'severe_wind': 'Probability of Severe Wind' } base_plot.add_colorbar(fig=fig, plot_obj=contours, ax=axes, colorbar_label=colorbar_labels[target]) fname = f'example_ml_predictions_vs_baseline_{date}_{time}_{target}_{time_marker}_{fti:02d}.png' plt._save_fig(fig=fig, fname=fname, dpi=300, aformat='png')
date_dir=str(date), time_dir=time, fcst_time_idx=fti ) mrms_dbz = mrms.load_single_mrms_time(date_dir=date, valid_datetime=initial_date_and_time, var_name='DZ_CRESSMAN' ) ens_data = EnsembleData(date_dir=date, time_dir=time, base_path='summary_files') data = ens_data.load(variables=['comp_dz'], time_indexs=[0], tag='ENS') wofs_dbz = data['comp_dz'].values[0] wofs_dbz = prob_match_mean(var=wofs_dbz, mean_var=np.mean(wofs_dbz, axis=0), neighborhood=15) init_time_str, valid_time_str = get_timestampes(initial_date_and_time, valid_date_and_time) idx = get_examples_at_datetime(info, date, time, fti) labeled_regions = load_probability_objects(date, time, fti) forecast_probabilities = to_predictions_2d(predictions, labeled_regions, labels_column, idx) map_axes, x, y = plt._generate_base_map(axes=[axes], date=date, fig=fig) kwargs = {'alpha':0.95, 'extend': 'neither', 'cmap': target_cmap[target_var]} plt = Plotting( date=None, z1_levels = np.arange(0., 1.1, .1), z2_levels = [35, 60], z3_levels=[35., 60], **kwargs ) contours = plt.spatial_plotting(fig, axes, x, y, z1=np.ma.masked_where( forecast_probabilities==0., forecast_probabilities), z2=mrms_dbz, z3=wofs_dbz, map_ax=map_axes[0], ) if i %3 == 0: contours_set.append(contours)