An example of how to plot MODIS cloud re and tau LUT (Nakajima and King's plot) in python using matplotlib:
How to get and read the Data
Note: the LUTs are available here
from pyhdf.SD import SD, SDCfrom scipy import interpolateimport matplotlib.pyplot as pltimport numpy as npimport mathimport matplotlib.patches as mpatchesimport matplotlib.cm as cmfile = SD('./MODIS_C6_LUTS/examples/ocean_PY_C6_reflectance_sol_08_view_03_relazm_13_wspeed_06pt00_2017151142552.hdf', SDC.READ)print( file.info() )#----------------------------------------------------------------------------------------## Get SDS infodatasets_dic = file.datasets()for idx,sds in enumerate(datasets_dic.keys()):print( idx,sds )sds_obj = file.select(sds)print( sds_obj.info() )print()print()#----------------------------------------------------------------------------------------## Get the DatareflectanceWater = file.select('reflectanceWater')ParticleRadiusWater = file.select('ParticleRadiusWater')reflectanceIce = file.select('reflectanceIce')ParticleRadiusIce = file.select('ParticleRadiusIce')WaveLengths = file.select('WaveLengths')OpticalThickness = file.select('OpticalThickness')reflectanceWater_data = reflectanceWater.get()ParticleRadiusWater_data = ParticleRadiusWater.get()reflectanceIce_data = reflectanceIce.get()ParticleRadiusIce_data = ParticleRadiusIce.get()WaveLengths_data = WaveLengths.get()OpticalThickness_data = OpticalThickness.get()liq_lut_shape = reflectanceWater_data.shapeice_lut_shape = reflectanceIce_data.shape
Nakajima and King's diagram
# band idx:# 0 --> 0.65899998# 1 --> 0.86500001# 2 --> 1.24000001# 3 --> 1.63999999# 4 --> 2.13000011# 5 --> 3.75x_band_idx = 0y_band_idx = 4phase = 'ice' # liquid or icefig = plt.figure()if phase == 'liquid':x = [reflectanceWater_data[index_re,x_band_idx,:] for index_re in np.arange(liq_lut_shape[0])]y = [reflectanceWater_data[index_re,y_band_idx,:] for index_re in np.arange(liq_lut_shape[0])]if phase == 'ice':x = [reflectanceIce_data[index_re,x_band_idx,:] for index_re in np.arange(ice_lut_shape[0])]y = [reflectanceIce_data[index_re,y_band_idx,:] for index_re in np.arange(ice_lut_shape[0])]plt.plot(x,y, 'steelblue',linewidth=0.5)if phase == 'liquid':x = [reflectanceWater_data[:,x_band_idx,index_tau] for index_tau in np.arange(liq_lut_shape[2])]y = [reflectanceWater_data[:,y_band_idx,index_tau] for index_tau in np.arange(liq_lut_shape[2])]if phase == 'ice':x = [reflectanceIce_data[:,x_band_idx,index_tau] for index_tau in np.arange(ice_lut_shape[2])]y = [reflectanceIce_data[:,y_band_idx,index_tau] for index_tau in np.arange(ice_lut_shape[2])]plt.plot(x,y, 'coral',linewidth=0.5)pop_a = mpatches.Patch(color='coral', label=r'Cloud Effective Radius ($\mu m$)')pop_b = mpatches.Patch(color='steelblue', label='Cloud Optical Thickness')plt.legend(handles=[pop_a,pop_b],fontsize=8)if phase == 'liquid': plt.title("MODIS Liquid Cloud LUT",fontsize=8)if phase == 'ice': plt.title("MODIS Ice Cloud LUT",fontsize=8)label = r'MODIS Band $\lambda = ' + str(WaveLengths_data[x_band_idx]) + r'\mu m$'plt.xlabel(label,fontsize=8)label = r'MODIS Band $\lambda = ' + str(WaveLengths_data[y_band_idx]) + r'\mu m$'plt.ylabel(label,fontsize=8)plt.savefig("plot_modis_ice_cloud_lut_01.png", bbox_inches='tight')plt.show()plt.close()
Add Re and Tau labels
#print(ParticleRadiusWater_data)#print(reflectanceIce_data)#print(OpticalThickness_data)x_band_idx = 0y_band_idx = 4phase = 'ice' # liquid or icefig = plt.figure()if phase == 'liquid':x = [reflectanceWater_data[index_re,x_band_idx,:] for index_re in np.arange(liq_lut_shape[0])]y = [reflectanceWater_data[index_re,y_band_idx,:] for index_re in np.arange(liq_lut_shape[0])]x_label_re = [reflectanceWater_data[index_re,x_band_idx,liq_lut_shape[2]-1] for index_re in np.arange(liq_lut_shape[0]) ]y_label_re = [reflectanceWater_data[index_re,y_band_idx,liq_lut_shape[2]-1] for index_re in np.arange(liq_lut_shape[0]) ]label_re = [str(ParticleRadiusWater_data[re_idx]) for re_idx in np.arange(ParticleRadiusWater_data.shape[0])]if phase == 'ice':x = [reflectanceIce_data[index_re,x_band_idx,:] for index_re in np.arange(ice_lut_shape[0])]y = [reflectanceIce_data[index_re,y_band_idx,:] for index_re in np.arange(ice_lut_shape[0])]x_label_re = [reflectanceIce_data[index_re,x_band_idx,ice_lut_shape[2]-1] for index_re in np.arange(ice_lut_shape[0]) ]y_label_re = [reflectanceIce_data[index_re,y_band_idx,ice_lut_shape[2]-1] for index_re in np.arange(ice_lut_shape[0]) ]label_re = [str(ParticleRadiusIce_data[re_idx]) for re_idx in np.arange(ParticleRadiusIce_data.shape[0])]plt.plot(x,y, 'steelblue',linewidth=0.5)for i,j,z in zip(x_label_re, y_label_re,label_re):plt.text( i+0.04, j, z, ha='center', va='center', fontsize=8, color='coral')if phase == 'liquid':x = [reflectanceWater_data[:,x_band_idx,index_tau] for index_tau in np.arange(liq_lut_shape[2])]y = [reflectanceWater_data[:,y_band_idx,index_tau] for index_tau in np.arange(liq_lut_shape[2])]idx_tau_list = [0,3,6,9,12,15,18,21,34]x_label = [reflectanceWater_data[0,x_band_idx,index_tau] for index_tau in idx_tau_list ]y_label = [reflectanceWater_data[0,y_band_idx,index_tau] for index_tau in idx_tau_list ]label = [str(OpticalThickness_data[re_idx]) for re_idx in idx_tau_list ]if phase == 'ice':x = [reflectanceIce_data[:,x_band_idx,index_tau] for index_tau in np.arange(ice_lut_shape[2])]y = [reflectanceIce_data[:,y_band_idx,index_tau] for index_tau in np.arange(ice_lut_shape[2])]idx_tau_list = [0,3,6,9,12,15,18,21,34]x_label = [reflectanceIce_data[0,x_band_idx,index_tau] for index_tau in idx_tau_list ]y_label = [reflectanceIce_data[0,y_band_idx,index_tau] for index_tau in idx_tau_list ]label = [str(OpticalThickness_data[re_idx]) for re_idx in idx_tau_list ]plt.plot(x,y, 'coral',linewidth=0.5)for i,j,z in zip(x_label, y_label, label):plt.text( i, j+0.03, z, ha='center', va='center', fontsize=8, color='steelblue')pop_a = mpatches.Patch(color='coral', label=r'Cloud Effective Radius ($\mu m$)')pop_b = mpatches.Patch(color='steelblue', label='Cloud Optical Thickness')plt.legend(handles=[pop_a,pop_b],loc=2,fontsize=8)if phase == 'liquid': plt.title("MODIS Liquid Cloud LUT",fontsize=8)if phase == 'ice': plt.title("MODIS Ice Cloud LUT",fontsize=8)label = r'MODIS Band $\lambda = ' + str(WaveLengths_data[x_band_idx]) + r'\mu m$'plt.xlabel(label,fontsize=8)label = r'MODIS Band $\lambda = ' + str(WaveLengths_data[y_band_idx]) + r'\mu m$'plt.ylabel(label,fontsize=8)plt.xlim(0,1.2)plt.ylim(0,0.8)plt.savefig("plot_modis_ice_cloud_lut_02.png", bbox_inches='tight')plt.show()plt.close()
Plot liquid and ice LUT together

x_band_idx = 0y_band_idx = 4fig = plt.figure()x = [reflectanceWater_data[index_re,x_band_idx,:] for index_re in np.arange(liq_lut_shape[0])]y = [reflectanceWater_data[index_re,y_band_idx,:] for index_re in np.arange(liq_lut_shape[0])]plt.plot(x,y,'--', color='coral',linewidth=0.5)x = [reflectanceIce_data[index_re,x_band_idx,:] for index_re in np.arange(ice_lut_shape[0])]y = [reflectanceIce_data[index_re,y_band_idx,:] for index_re in np.arange(ice_lut_shape[0])]plt.plot(x,y,'--', color= 'steelblue',linewidth=0.5)x = [reflectanceWater_data[:,x_band_idx,index_tau] for index_tau in np.arange(liq_lut_shape[2])]y = [reflectanceWater_data[:,y_band_idx,index_tau] for index_tau in np.arange(liq_lut_shape[2])]plt.plot(x,y,'--', color= 'coral',linewidth=0.5)x = [reflectanceIce_data[:,x_band_idx,index_tau] for index_tau in np.arange(ice_lut_shape[2])]y = [reflectanceIce_data[:,y_band_idx,index_tau] for index_tau in np.arange(ice_lut_shape[2])]plt.plot(x,y,'--', color= 'steelblue',linewidth=0.5)pop_a = mpatches.Patch(color='coral', label=r'Liquid Cloud')pop_b = mpatches.Patch(color='steelblue', label='Ice Cloud')plt.legend(handles=[pop_a,pop_b],fontsize=8)plt.title("MODIS Cloud LUT",fontsize=8)label = r'MODIS Band $\lambda = ' + str(WaveLengths_data[x_band_idx]) + r'\mu m$'plt.xlabel(label,fontsize=8)label = r'MODIS Band $\lambda = ' + str(WaveLengths_data[y_band_idx]) + r'\mu m$'plt.ylabel(label,fontsize=8)plt.savefig("plot_modis_cloud_lut_01.png", bbox_inches='tight')plt.show()plt.close()
Source Code
from pyhdf.SD import SD, SDCfrom scipy import interpolateimport matplotlib.pyplot as pltimport numpy as npimport mathimport matplotlib.patches as mpatchesimport matplotlib.cm as cmfile = SD('./MODIS_C6_LUTS/examples/ocean_PY_C6_reflectance_sol_08_view_03_relazm_13_wspeed_06pt00_2017151142552.hdf', SDC.READ)print( file.info() )#----------------------------------------------------------------------------------------## Get SDS infodatasets_dic = file.datasets()for idx,sds in enumerate(datasets_dic.keys()):print( idx,sds )sds_obj = file.select(sds)print( sds_obj.info() )print()print()#----------------------------------------------------------------------------------------## Get the DatareflectanceWater = file.select('reflectanceWater')ParticleRadiusWater = file.select('ParticleRadiusWater')reflectanceIce = file.select('reflectanceIce')ParticleRadiusIce = file.select('ParticleRadiusIce')WaveLengths = file.select('WaveLengths')OpticalThickness = file.select('OpticalThickness')reflectanceWater_data = reflectanceWater.get()ParticleRadiusWater_data = ParticleRadiusWater.get()reflectanceIce_data = reflectanceIce.get()ParticleRadiusIce_data = ParticleRadiusIce.get()WaveLengths_data = WaveLengths.get()OpticalThickness_data = OpticalThickness.get()liq_lut_shape = reflectanceWater_data.shapeice_lut_shape = reflectanceIce_data.shape#----------------------------------------------------------------------------------------## Plot Nakajima and King LUT:# band idx:# 0 --> 0.65899998# 1 --> 0.86500001# 2 --> 1.24000001# 3 --> 1.63999999# 4 --> 2.13000011# 5 --> 3.75x_band_idx = 0y_band_idx = 4phase = 'ice' # liquid or icefig = plt.figure()if phase == 'liquid':x = [reflectanceWater_data[index_re,x_band_idx,:] for index_re in np.arange(liq_lut_shape[0])]y = [reflectanceWater_data[index_re,y_band_idx,:] for index_re in np.arange(liq_lut_shape[0])]if phase == 'ice':x = [reflectanceIce_data[index_re,x_band_idx,:] for index_re in np.arange(ice_lut_shape[0])]y = [reflectanceIce_data[index_re,y_band_idx,:] for index_re in np.arange(ice_lut_shape[0])]plt.plot(x,y, 'steelblue',linewidth=0.5)if phase == 'liquid':x = [reflectanceWater_data[:,x_band_idx,index_tau] for index_tau in np.arange(liq_lut_shape[2])]y = [reflectanceWater_data[:,y_band_idx,index_tau] for index_tau in np.arange(liq_lut_shape[2])]if phase == 'ice':x = [reflectanceIce_data[:,x_band_idx,index_tau] for index_tau in np.arange(ice_lut_shape[2])]y = [reflectanceIce_data[:,y_band_idx,index_tau] for index_tau in np.arange(ice_lut_shape[2])]plt.plot(x,y, 'coral',linewidth=0.5)pop_a = mpatches.Patch(color='coral', label=r'Cloud Effective Radius ($\mu m$)')pop_b = mpatches.Patch(color='steelblue', label='Cloud Optical Thickness')plt.legend(handles=[pop_a,pop_b],fontsize=8)if phase == 'liquid': plt.title("MODIS Liquid Cloud LUT",fontsize=8)if phase == 'ice': plt.title("MODIS Ice Cloud LUT",fontsize=8)label = r'MODIS Band $\lambda = ' + str(WaveLengths_data[x_band_idx]) + r'\mu m$'plt.xlabel(label,fontsize=8)label = r'MODIS Band $\lambda = ' + str(WaveLengths_data[y_band_idx]) + r'\mu m$'plt.ylabel(label,fontsize=8)plt.savefig("plot_modis_ice_cloud_lut_01.png", bbox_inches='tight')plt.show()plt.close()#----------------------------------------------------------------------------------------## Add Re and Tau labels#print(ParticleRadiusWater_data)#print(reflectanceIce_data)#print(OpticalThickness_data)x_band_idx = 0y_band_idx = 4phase = 'ice' # liquid or icefig = plt.figure()if phase == 'liquid':x = [reflectanceWater_data[index_re,x_band_idx,:] for index_re in np.arange(liq_lut_shape[0])]y = [reflectanceWater_data[index_re,y_band_idx,:] for index_re in np.arange(liq_lut_shape[0])]x_label_re = [reflectanceWater_data[index_re,x_band_idx,liq_lut_shape[2]-1] for index_re in np.arange(liq_lut_shape[0]) ]y_label_re = [reflectanceWater_data[index_re,y_band_idx,liq_lut_shape[2]-1] for index_re in np.arange(liq_lut_shape[0]) ]label_re = [str(ParticleRadiusWater_data[re_idx]) for re_idx in np.arange(ParticleRadiusWater_data.shape[0])]if phase == 'ice':x = [reflectanceIce_data[index_re,x_band_idx,:] for index_re in np.arange(ice_lut_shape[0])]y = [reflectanceIce_data[index_re,y_band_idx,:] for index_re in np.arange(ice_lut_shape[0])]x_label_re = [reflectanceIce_data[index_re,x_band_idx,ice_lut_shape[2]-1] for index_re in np.arange(ice_lut_shape[0]) ]y_label_re = [reflectanceIce_data[index_re,y_band_idx,ice_lut_shape[2]-1] for index_re in np.arange(ice_lut_shape[0]) ]label_re = [str(ParticleRadiusIce_data[re_idx]) for re_idx in np.arange(ParticleRadiusIce_data.shape[0])]plt.plot(x,y, 'steelblue',linewidth=0.5)for i,j,z in zip(x_label_re, y_label_re,label_re):plt.text( i+0.04, j, z, ha='center', va='center', fontsize=8, color='coral')if phase == 'liquid':x = [reflectanceWater_data[:,x_band_idx,index_tau] for index_tau in np.arange(liq_lut_shape[2])]y = [reflectanceWater_data[:,y_band_idx,index_tau] for index_tau in np.arange(liq_lut_shape[2])]idx_tau_list = [0,3,6,9,12,15,18,21,34]x_label = [reflectanceWater_data[0,x_band_idx,index_tau] for index_tau in idx_tau_list ]y_label = [reflectanceWater_data[0,y_band_idx,index_tau] for index_tau in idx_tau_list ]label = [str(OpticalThickness_data[re_idx]) for re_idx in idx_tau_list ]if phase == 'ice':x = [reflectanceIce_data[:,x_band_idx,index_tau] for index_tau in np.arange(ice_lut_shape[2])]y = [reflectanceIce_data[:,y_band_idx,index_tau] for index_tau in np.arange(ice_lut_shape[2])]idx_tau_list = [0,3,6,9,12,15,18,21,34]x_label = [reflectanceIce_data[0,x_band_idx,index_tau] for index_tau in idx_tau_list ]y_label = [reflectanceIce_data[0,y_band_idx,index_tau] for index_tau in idx_tau_list ]label = [str(OpticalThickness_data[re_idx]) for re_idx in idx_tau_list ]plt.plot(x,y, 'coral',linewidth=0.5)for i,j,z in zip(x_label, y_label, label):plt.text( i, j+0.03, z, ha='center', va='center', fontsize=8, color='steelblue')pop_a = mpatches.Patch(color='coral', label=r'Cloud Effective Radius ($\mu m$)')pop_b = mpatches.Patch(color='steelblue', label='Cloud Optical Thickness')plt.legend(handles=[pop_a,pop_b],loc=2,fontsize=8)if phase == 'liquid': plt.title("MODIS Liquid Cloud LUT",fontsize=8)if phase == 'ice': plt.title("MODIS Ice Cloud LUT",fontsize=8)label = r'MODIS Band $\lambda = ' + str(WaveLengths_data[x_band_idx]) + r'\mu m$'plt.xlabel(label,fontsize=8)label = r'MODIS Band $\lambda = ' + str(WaveLengths_data[y_band_idx]) + r'\mu m$'plt.ylabel(label,fontsize=8)plt.xlim(0,1.2)plt.ylim(0,0.8)plt.savefig("plot_modis_ice_cloud_lut_02.png", bbox_inches='tight')plt.show()plt.close()#----------------------------------------------------------------------------------------## Plot liquid and ice LUT togetherx_band_idx = 0y_band_idx = 4fig = plt.figure()x = [reflectanceWater_data[index_re,x_band_idx,:] for index_re in np.arange(liq_lut_shape[0])]y = [reflectanceWater_data[index_re,y_band_idx,:] for index_re in np.arange(liq_lut_shape[0])]plt.plot(x,y,'--', color='coral',linewidth=0.5)x = [reflectanceIce_data[index_re,x_band_idx,:] for index_re in np.arange(ice_lut_shape[0])]y = [reflectanceIce_data[index_re,y_band_idx,:] for index_re in np.arange(ice_lut_shape[0])]plt.plot(x,y,'--', color= 'steelblue',linewidth=0.5)x = [reflectanceWater_data[:,x_band_idx,index_tau] for index_tau in np.arange(liq_lut_shape[2])]y = [reflectanceWater_data[:,y_band_idx,index_tau] for index_tau in np.arange(liq_lut_shape[2])]plt.plot(x,y,'--', color= 'coral',linewidth=0.5)x = [reflectanceIce_data[:,x_band_idx,index_tau] for index_tau in np.arange(ice_lut_shape[2])]y = [reflectanceIce_data[:,y_band_idx,index_tau] for index_tau in np.arange(ice_lut_shape[2])]plt.plot(x,y,'--', color= 'steelblue',linewidth=0.5)pop_a = mpatches.Patch(color='coral', label=r'Liquid Cloud')pop_b = mpatches.Patch(color='steelblue', label='Ice Cloud')plt.legend(handles=[pop_a,pop_b],fontsize=8)plt.title("MODIS Cloud LUT",fontsize=8)label = r'MODIS Band $\lambda = ' + str(WaveLengths_data[x_band_idx]) + r'\mu m$'plt.xlabel(label,fontsize=8)label = r'MODIS Band $\lambda = ' + str(WaveLengths_data[y_band_idx]) + r'\mu m$'plt.ylabel(label,fontsize=8)plt.savefig("plot_modis_cloud_lut_01.png", bbox_inches='tight')plt.show()plt.close()
