25
25
26
26
class LeadAverage :
27
27
"""
28
- Create a lead average graphic
28
+ Make a lead average graphic
29
29
"""
30
30
31
31
def __init__ (self , logger , input_dir , output_dir , model_info_dict ,
@@ -54,13 +54,13 @@ def __init__(self, logger, input_dir, output_dir, model_info_dict,
54
54
self .logo_dir = logo_dir
55
55
56
56
def make_lead_average (self ):
57
- """! Create the lead average graphic
57
+ """! Make the lead average graphic
58
58
59
59
Args:
60
60
61
61
Returns:
62
62
"""
63
- self .logger .info (f"Creating lead average... " )
63
+ self .logger .info ("Plot Type: Lead Average " )
64
64
self .logger .debug (f"Input directory: { self .input_dir } " )
65
65
self .logger .debug (f"Output directory: { self .output_dir } " )
66
66
self .logger .debug (f"Model information dictionary: "
@@ -74,13 +74,14 @@ def make_lead_average(self):
74
74
self .logger .error ("Cannot make lead_average for stat "
75
75
+ f"{ self .plot_info_dict ['stat' ]} " )
76
76
sys .exit (1 )
77
- # Create dataframe for all forecast hours
77
+ # Make dataframe for all forecast hours
78
78
self .logger .info ("Building dataframe for all forecast hours" )
79
+ self .logger .info (f"Reading in model stat files from { self .input_dir } " )
79
80
fcst_units = []
80
81
for forecast_hour in self .date_info_dict ['forecast_hours' ]:
81
- self .logger .debug (f"Building data for forecast hour { forecast_hour } " )
82
+ self .logger .info (f"Building data for forecast hour { forecast_hour } " )
82
83
# Get dates to plot
83
- self .logger .info ( "Creating valid and init date arrays" )
84
+ self .logger .debug ( "Making valid and init date arrays" )
84
85
valid_dates , init_dates = gda_util .get_plot_dates (
85
86
self .logger ,
86
87
self .date_info_dict ['date_type' ],
@@ -114,9 +115,8 @@ def make_lead_average(self):
114
115
+ ', ' .join (format_valid_dates ))
115
116
plot_dates = init_dates
116
117
# Read in data
117
- self .logger .info (f"Reading in model stat files from { self .input_dir } " )
118
118
all_model_df = gda_util .build_df (
119
- self .logger , self .input_dir , self .output_dir ,
119
+ 'make_plots' , self .logger , self .input_dir , self .output_dir ,
120
120
self .model_info_dict , self .met_info_dict ,
121
121
self .plot_info_dict ['fcst_var_name' ],
122
122
self .plot_info_dict ['fcst_var_level' ],
@@ -148,7 +148,7 @@ def make_lead_average(self):
148
148
stat_df .index .get_level_values (0 ).unique ().tolist ()
149
149
)
150
150
if self .plot_info_dict ['event_equalization' ] == 'YES' :
151
- self .logger .debug ("Doing event equalization" )
151
+ self .logger .info ("Doing event equalization" )
152
152
masked_stat_array = np .ma .masked_invalid (stat_array )
153
153
stat_array = np .ma .mask_cols (masked_stat_array )
154
154
stat_array = stat_array .filled (fill_value = np .nan )
@@ -226,7 +226,7 @@ def make_lead_average(self):
226
226
# scale=stats.sem(np.ma.compressed(model_idx_model1_diff))
227
227
#)
228
228
# Set up plot
229
- self .logger .info (f"Doing plot set up " )
229
+ self .logger .info (f"Setting up plot " )
230
230
plot_specs_la = PlotSpecs (self .logger , 'lead_average' )
231
231
plot_specs_la .set_up_plot ()
232
232
n_xticks = 17
@@ -261,7 +261,6 @@ def make_lead_average(self):
261
261
self .plot_info_dict , self .date_info_dict ,
262
262
fcst_units [0 ]
263
263
)
264
- plot_left_logo = False
265
264
plot_left_logo_path = os .path .join (self .logo_dir , 'noaa.png' )
266
265
if os .path .exists (plot_left_logo_path ):
267
266
plot_left_logo = True
@@ -274,7 +273,9 @@ def make_lead_average(self):
274
273
plot_specs_la .fig_size [1 ], plt .rcParams ['figure.dpi' ]
275
274
)
276
275
)
277
- plot_right_logo = False
276
+ else :
277
+ plot_left_logo = False
278
+ self .logger .debug (f"{ plot_left_logo_path } does not exist" )
278
279
plot_right_logo_path = os .path .join (self .logo_dir , 'nws.png' )
279
280
if os .path .exists (plot_right_logo_path ):
280
281
plot_right_logo = True
@@ -287,11 +288,14 @@ def make_lead_average(self):
287
288
plot_specs_la .fig_size [1 ], plt .rcParams ['figure.dpi' ]
288
289
)
289
290
)
291
+ else :
292
+ plot_right_logo = False
293
+ self .logger .debug (f"{ plot_right_logo_path } does not exist" )
290
294
image_name = plot_specs_la .get_savefig_name (
291
295
self .output_dir , self .plot_info_dict , self .date_info_dict
292
296
)
293
- # Create plot
294
- self .logger .info (f"Creating plot for { self . plot_info_dict [ 'stat' ] } " )
297
+ # Make plot
298
+ self .logger .info (f"Making plot" )
295
299
fig , (ax1 , ax2 ) = plt .subplots (2 ,1 ,
296
300
figsize = (plot_specs_la .fig_size [0 ],
297
301
plot_specs_la .fig_size [1 ]),
@@ -360,11 +364,11 @@ def make_lead_average(self):
360
364
model_num_plot_settings_dict = (
361
365
model_plot_settings_dict [model_num ]
362
366
)
363
- self .logger .debug (f"Plotting { model_num } - { model_num_name } "
364
- + f"- { model_num_plot_name } " )
365
367
masked_model_num_data = np .ma .masked_invalid (model_num_data )
366
368
if model_num == 'model1' :
367
369
model1_masked_model_num_data = masked_model_num_data
370
+ model1_name = model_num_name
371
+ model1_plot_name = model_num_plot_name
368
372
model_num_npts = (
369
373
len (masked_model_num_data )
370
374
- np .ma .count_masked (masked_model_num_data )
@@ -373,9 +377,9 @@ def make_lead_average(self):
373
377
np .ma .getmask (masked_model_num_data ),
374
378
forecast_hours_avg_df .columns .values .tolist ()
375
379
)
380
+ self .logger .debug (f"Plotting { model_num } [{ model_num_name } ,"
381
+ + f"{ model_num_plot_name } ]" )
376
382
if model_num_npts != 0 :
377
- self .logger .debug (f"Plotting { model_num } - { model_num_name } "
378
- + f"- { model_num_plot_name } " )
379
383
ax1 .plot (
380
384
np .ma .compressed (masked_forecast_hours ),
381
385
np .ma .compressed (masked_model_num_data ),
@@ -400,6 +404,9 @@ def make_lead_average(self):
400
404
stat_min_max_dict ['ax1_stat_max' ] = (
401
405
masked_model_num_data .max ()
402
406
)
407
+ else :
408
+ self .logger .debug (f"{ model_num } [{ model_num_name } ,"
409
+ + f"{ model_num_plot_name } ] has no points" )
403
410
masked_model_num_model1_diff_data = np .ma .masked_invalid (
404
411
model_num_data - model1_masked_model_num_data
405
412
)
@@ -411,10 +418,11 @@ def make_lead_average(self):
411
418
np .ma .getmask (masked_model_num_model1_diff_data ),
412
419
forecast_hours_avg_df .columns .values .tolist ()
413
420
)
421
+ self .logger .debug (f"Plotting { model_num } [{ model_num_name } ,"
422
+ + f"{ model_num_plot_name } ] difference from "
423
+ + f"model1 [{ model1_name } ,"
424
+ + f"{ model1_plot_name } ]" )
414
425
if model_num_diff_npts != 0 :
415
- self .logger .debug (f"Plotting { model_num } - { model_num_name } "
416
- + f"- { model_num_plot_name } difference from "
417
- + self .model_info_dict ['model1' ]['plot_name' ])
418
426
ax2 .plot (
419
427
np .ma .compressed (masked_diff_forecast_hours ),
420
428
np .ma .compressed (masked_model_num_model1_diff_data ),
@@ -438,6 +446,12 @@ def make_lead_average(self):
438
446
stat_min_max_dict ['ax2_stat_max' ] = (
439
447
masked_model_num_model1_diff_data .max ()
440
448
)
449
+ else :
450
+ self .logger .debug (f"{ model_num } [{ model_num_name } ,"
451
+ + f"{ model_num_plot_name } ] difference from "
452
+ + f"model1 [{ model1_name } ,{ model1_plot_name } ] "
453
+ + "has no points" )
454
+
441
455
if model_num == 'model1' :
442
456
ax2 .plot (
443
457
forecast_hours_avg_df .columns .values .tolist (),
@@ -462,13 +476,13 @@ def make_lead_average(self):
462
476
np .ma .getmask (masked_model_num_model1_diff_ci_data ),
463
477
forecast_hours_ci_df .columns .values .tolist ()
464
478
)
479
+ self .logger .debug (f"Plotting { model_num } ["
480
+ + f"{ model_num_name } ,"
481
+ + f"{ model_num_plot_name } ] difference "
482
+ + f"from model1 [{ model1_name } ,"
483
+ + f"{ model1_plot_name } ] "
484
+ + "confidence intervals" )
465
485
if model_num_ci_npts != 0 :
466
- self .logger .debug (f"Plotting { model_num } - "
467
- + f"{ model_num_name } "
468
- + f"- { model_num_plot_name } "
469
- + "difference from "
470
- + self .model_info_dict ['model1' ]['plot_name' ]
471
- + " confidence intervals" )
472
486
ci_min = masked_model_num_model1_diff_ci_data .min ()
473
487
ci_max = masked_model_num_model1_diff_ci_data .max ()
474
488
if ci_min < stat_min_max_dict ['ax2_stat_min' ] \
@@ -510,6 +524,13 @@ def make_lead_average(self):
510
524
color = 'None' ,
511
525
edgecolor = model_num_plot_settings_dict ['color' ],
512
526
linewidth = 1 )
527
+ else :
528
+ self .logger .debug (f"{ model_num } : ["
529
+ + f"{ model_num_name } ,"
530
+ + f"{ model_num_plot_name } ] difference "
531
+ + f"from model1 [{ model1_name } ,"
532
+ + f"{ model1_plot_name } ] "
533
+ + "confidence intervals has no points" )
513
534
subplot_num = 1
514
535
for ax in fig .get_axes ():
515
536
stat_min = stat_min_max_dict ['ax' + str (subplot_num )+ '_stat_min' ]
@@ -649,7 +670,7 @@ def main():
649
670
'root' : '/PATH/TO/MET' ,
650
671
'version' : '11.0.2'
651
672
}
652
- # Create OUTPUT_DIR
673
+ # Make OUTPUT_DIR
653
674
gda_util .make_dir (OUTPUT_DIR )
654
675
# Set up logging
655
676
logging_dir = os .path .join (OUTPUT_DIR , 'logs' )
0 commit comments