def Plot_on_Segments(Scalar_Field, Variable_Name, year, month, day, hour, forecast_period, num_cells, filename='plot'): """ Plot some field associated with the different segments. """ #Load a single instance of the data set so that we can get the latitude and longitude coordinates: f = mogreps.download_data('mogreps-uk', mogreps.make_data_object_name( 'mogreps-uk', year, Month_Map(month), day, hour, 0, forecast_period), data_folder=Path('.')) data_set = netCDF4.Dataset(f) rotation = data_set['rotated_latitude_longitude'] transform = ccrs.RotatedPole( pole_longitude=rotation.grid_north_pole_longitude, pole_latitude=rotation.grid_north_pole_latitude) projection = transform fig = plt.figure(figsize=(20, 10)) #create an axis instance: ax = fig.add_subplot(111, projection=projection) pcm = ax.pcolormesh(data_set['grid_longitude'], data_set['grid_latitude'], Scalar_Field, transform=transform, cmap='jet') ax.coastlines(resolution='10m') #ax.colorbar() colbar = fig.colorbar(pcm) #ax.imshow(mark_boundaries(image, segments)) #colbar.set_label("VAR(" + str(variable_name) + ")") plt.title(Variable_Name + " " + str(year) + "_" + month + "_" + str(day) + "_" + str(hour) + "_forcast_period=" + str(forecast_period)) plt.savefig(filename + "_" + str(year) + "_" + month + "_" + str(day) + "_h_" + str(hour) + "_fp_" + str(forecast_period) + "_cells_" + str(num_cells), bbox_inches='tight') plt.show()
import numpy, scipy, matplotlib, cartopy, netCDF4, seaborn, mogreps from pathlib import Path forecast_3 = mogreps.download_data('mogreps-uk', mogreps.make_data_object_name( 'mogreps-uk', 2015, 12, 5, 15, 0, 3), data_folder=Path('.')) forecast_9 = mogreps.download_data('mogreps-uk', mogreps.make_data_object_name( 'mogreps-uk', 2015, 12, 5, 9, 0, 9), data_folder=Path('.')) forecast_15 = mogreps.download_data('mogreps-uk', mogreps.make_data_object_name( 'mogreps-uk', 2015, 12, 5, 3, 0, 15), data_folder=Path('.')) forecast_21 = mogreps.download_data('mogreps-uk', mogreps.make_data_object_name( 'mogreps-uk', 2015, 12, 4, 21, 0, 21), data_folder=Path('.')) forecast_27 = mogreps.download_data('mogreps-uk', mogreps.make_data_object_name( 'mogreps-uk', 2015, 12, 4, 15, 0, 27), data_folder=Path('.')) forecast_33 = mogreps.download_data('mogreps-uk', mogreps.make_data_object_name( 'mogreps-uk', 2015, 12, 4, 9, 0, 33), data_folder=Path('.')) DS_forecast_3 = netCDF4.Dataset(forecast_3) DS_forecast_9 = netCDF4.Dataset(forecast_9)
def Get_Super_Pixel_STDs(variable, segments, year, month, day, hour, forecast_period): """ Given a segmentation into superpixels we compute the variance in a given variable across ensemble members for each superpixel. We then return the variance across the different ensemble members. Parameters ------------ variable : str String specifying the property we are interested in analyisng """ #variable = 'air_temperature' STD_Vals = [] Variance_Vals = [] CV_Vals = [] for PIXEL in range(np.max(segments)): #Loop over ensembles within a superpixel: num_ensemble_members = 12 Averages_in_this_pixel = [] print("Pixel = " + str(PIXEL)) for i in range(num_ensemble_members): f = mogreps.download_data('mogreps-uk', mogreps.make_data_object_name( 'mogreps-uk', year, Month_Map(month), day, hour, i, forecast_period), data_folder=Path('.')) data_set = netCDF4.Dataset(f) #Try except fudge to account for the fact that different arrays are at different depths: try: average_for_this_ensemble_member_in_this_super_pixel = np.mean( data_set.variables[variable][0].data[segments == PIXEL]) except: average_for_this_ensemble_member_in_this_super_pixel = np.mean( data_set.variables[variable][0][0].data[segments == PIXEL]) Averages_in_this_pixel.append( average_for_this_ensemble_member_in_this_super_pixel) #compute the varaiance for this superpixel: Variance_for_this_pixel = np.var(Averages_in_this_pixel) STD_for_this_pixel = np.std(Averages_in_this_pixel) STD_Vals.append(STD_for_this_pixel) Variance_Vals.append(Variance_for_this_pixel) CV_Vals.append( np.std(Averages_in_this_pixel) / np.mean(Averages_in_this_pixel)) return STD_Vals, Variance_Vals, CV_Vals
p_array = output_data.variables['pressure_error'] T_array = output_data.variables['temperature_error'] r_array = output_data.variables['rainfall_error'] # Lead time of 3hrs lead_time = 3 for year in years: for month in months: for day in days: for time in times: forecast_name = download_data('mogreps-uk', make_data('mogreps-uk', year, month, day - 1, time, 0, lead_time), data_folder=Path('.')) reference_name = download_data('mogreps-uk', make_data('mogreps-uk', year, month, day, time, 0, lead_time), data_folder=Path('.'))