我想使用单个像素的角点在地图上绘制TROPOMI卫星像素。到目前为止,我正在通过添加与各个像素相对应的补丁来循环执行此操作。因为我有很多像素,所以速度非常慢。欢迎提出更快的建议。我共享我的代码的当前版本。数据可用here。也欢迎对代码进行进一步的改进!
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
import netCDF4
import os
from datetime import date
import pandas as pd
from matplotlib.patches import Polygon
from matplotlib import colors
import matplotlib as mpl
def value2color(value, vmin, vmax):
#normalize item number values to colormap
norm = colors.Normalize(vmin=vmin, vmax=vmax)
#colormap possible values = viridis, jet, spectral
color = plt.cm.Reds(norm(value))
return color
dirname = r'M:\nobackup\NetCDF'
start_date = date(2019, 3, 22)
end_date = date(2019, 3, 22)
for single_date in pd.date_range(start_date, end_date):
fig,ax = plt.subplots()
plt.title('TROPOMI BrO VCD map for '+ single_date.strftime("%d.%m.%Y"))
map = Basemap(projection='cyl',llcrnrlat=20,urcrnrlat=27,\
llcrnrlon=65,urcrnrlon=75,resolution='i', ax=ax)
map.drawcoastlines()
map.drawcountries()
# draw parallels and meridians.
map.drawparallels(np.arange(20.,30.,2.),labels=[1,0,0,0])
map.drawmeridians(np.arange(65.,75.,2.),labels=[0,0,0,1])
fl = netCDF4.Dataset(os.path.join(dirname, 'MPIC_BrO_RannOfKutch_'+single_date.strftime("%Y%m%d")+'.nc'))
f = fl.groups['PRODUCT']
lat_bnds = f.variables['lat_bounds'][:].T
lon_bnds = f.variables['lon_bounds'][:].T
bro_vcd = f.variables['vcd'][:]
cval = [value2color(i, 0, 8E13) for i in bro_vcd]
patches = []
for i in range(len(bro_vcd)):
lons = np.array([lon_bnds[i,0],lon_bnds[i,1],lon_bnds[i,2],lon_bnds[i,3]])
lats = np.array([lat_bnds[i,0],lat_bnds[i,1],lat_bnds[i,2],lat_bnds[i,3]])
poly = Polygon(np.vstack([lons,lats]).T,facecolor=cval[i],edgecolor='none')
ax.add_patch(poly)
norm = mpl.colors.Normalize(vmin=0,vmax=8e13)
sm = plt.cm.ScalarMappable(cmap='Reds', norm=norm)
sm.set_array([])
fig.subplots_adjust(right=0.85, wspace = 0.02)
cbar_ax=fig.add_axes([0.89, 0.2, 0.02, 0.6])
cbar=fig.colorbar(sm, cax = cbar_ax, extend='max')
cbar.set_label('BrO tropospheric VCD (molec cm$^{-2}$)', fontsize=11)