from pylab import matplotlib
from datetime import date
from os import path
import urllib.request
import urllib.request, json
import pprint
import os
import pandas as pd
import glob
import netCDF4
import random
import matplotlib.pyplot as plt
import matplotlib as mpl
import matplotlib.cm as cm
import numpy as np
import numpy.ma as ma
import warnings
from matplotlib.pyplot import figure
warnings.filterwarnings('ignore')
You can download the file used in this tutorial by clicking on the provided link:
https://drive.google.com/file/d/1hp5vdonRXYNJ2AEgk-RS_rtij0GSSzy6/view?usp=sharing
file_name = "/Volumes/HD2/Datasets/Research//NASA/Suomi-NPP/VIIRS/VNP14IMG/2019/2019_08_03/VNP14IMG.A2019215.2106.001.2019216045602.nc"
f = netCDF4.Dataset(file_name)
print(f)
for key in f.__dict__.keys(): print(key)
f.StartTime
f.EndTime
print( f.NorthBoundingCoordinate )
print( f.SouthBoundingCoordinate )
print( f.EastBoundingCoordinate )
print( f.WestBoundingCoordinate )
for key in f.variables.keys():
print(key)
for key, variable in f.variables.items():
print(key)
print(variable)
print()
f.variables['fire mask']
masked_data = f.variables['fire mask']
data = ma.getdata(masked_data)
data
def plot_fire_mask(data,filename,show_plot):
cmap = cm.get_cmap('RdBu_r', 11) # PiYG
color_list = ['#808080']
for i in range(cmap.N):
rgba = cmap(i)
color_list.append(matplotlib.colors.rgb2hex(rgba))
fig = figure(num=None, figsize=(12, 10), dpi=200, facecolor='w', edgecolor='k')
ax = fig.add_subplot(111)
cmap = color_list
cmap = mpl.colors.ListedColormap(cmap)
bounds = [i for i in range(11)]
norm = mpl.colors.BoundaryNorm(bounds, cmap.N)
img = plt.imshow(data, cmap=cmap, norm=norm, interpolation='none')
cbar_bounds = bounds
cbar_ticks = [(cbar_bounds[i+1]-cbar_bounds[i])/2.0+cbar_bounds[i] for i in range( len(cbar_bounds) - 1 )] # [0.5, 1.5, 155.0, 254.0, 255.0]
cbar_labels = [i for i in range(10)]
cbar = plt.colorbar(img, cmap=cmap, norm=norm, boundaries=cbar_bounds, ticks=cbar_ticks)
cbar.ax.set_yticklabels(cbar_labels, fontsize=10)
plt.title('FRP MASK')
plt.grid(c='black',ls='--')
plt.xticks(np.linspace(0, data.shape[1], 10))
plt.yticks(np.linspace(0, data.shape[0], 10))
ax.spines['bottom'].set_color('black')
ax.spines['top'].set_color('black')
ax.spines['left'].set_color('black')
ax.spines['right'].set_color('black')
#plt.savefig('./outputs/L2/FRP/{}_mask.png'.format(filename.split('.')[0]), dpi=100, bbox_inches='tight')
if show_plot:
plt.show()
plt.close()
return None
filename = 'test'
plot_fire_mask(data,filename,show_plot=True)
df_mask = pd.DataFrame(data.ravel(),columns=['fire_mask'])
df_mask.columns
df_mask
df_mask['fire_mask'].value_counts()
x_axis_size = data.shape[1]
y_axis_size = data.shape[0]
xv, yv = np.meshgrid(np.arange(0,x_axis_size), np.arange(0,y_axis_size))
df_mask['sample'] = xv.flatten()
df_mask['line'] = yv.flatten()
df_mask
df = pd.DataFrame()
for variable in ['FP_sample','FP_line','FP_latitude','FP_longitude','FP_power']:
masked_data = f.variables[variable]
data = ma.getdata(masked_data)
df[variable] = data.ravel()
df
df.rename(columns={'FP_sample': 'sample'}, inplace=True)
df.rename(columns={'FP_line': 'line'}, inplace=True)
df
df_merged = pd.merge(df,df_mask, on=['sample','line'], how='inner')
df_merged
idx_min = df_merged['sample'].min()
idx_max = df_merged['sample'].max()
jdx_min = df_merged['line'].min()
jdx_max = df_merged['line'].max()
masked_data = f.variables['fire mask']
data = ma.getdata(masked_data)
#data = data[idx_min:idx_max,jdx_min:jdx_max]
cmap = cm.get_cmap('RdBu_r', 11) # PiYG
color_list = ['#808080']
for i in range(cmap.N):
rgba = cmap(i)
color_list.append(matplotlib.colors.rgb2hex(rgba))
fig = figure(num=None, figsize=(12, 10), dpi=200, facecolor='w', edgecolor='k')
ax = fig.add_subplot(111)
cmap = color_list
cmap = mpl.colors.ListedColormap(cmap)
bounds = [i for i in range(11)]
norm = mpl.colors.BoundaryNorm(bounds, cmap.N)
img = plt.imshow(data, cmap=cmap, norm=norm, interpolation='none')
cbar_bounds = bounds
cbar_ticks = [(cbar_bounds[i+1]-cbar_bounds[i])/2.0+cbar_bounds[i] for i in range( len(cbar_bounds) - 1 )] # [0.5, 1.5, 155.0, 254.0, 255.0]
cbar_labels = [i for i in range(10)]
cbar = plt.colorbar(img, cmap=cmap, norm=norm, boundaries=cbar_bounds, ticks=cbar_ticks)
cbar.ax.set_yticklabels(cbar_labels, fontsize=10)
plt.title('FRP MASK')
plt.grid(c='black',ls='--')
plt.xticks(np.linspace(0, data.shape[1], 10))
plt.yticks(np.linspace(0, data.shape[0], 10))
ax.spines['bottom'].set_color('black')
ax.spines['top'].set_color('black')
ax.spines['left'].set_color('black')
ax.spines['right'].set_color('black')
for index,row in df_merged.iterrows():
#print(row,type(row),row[1])
#print(row['sample'])
plt.scatter(row['sample'],row['line'],s=14,color='red')
#print('----')
#plt.savefig('./outputs/L2/FRP/{}_mask.png'.format(filename.split('.')[0]), dpi=100, bbox_inches='tight')
plt.show()
plt.close()
f.close()