Я хочу нанести пиксели спутников TROPOMI на карту, используя угловые точки отдельных пикселей. На данный момент я делаю это в al oop, добавляя патчи, соответствующие отдельным пикселям. Поскольку у меня много пикселей, это очень медленно. Предложения, чтобы сделать это быстрее, приветствуются. Я делюсь настоящей версией моего кода. Данные доступны здесь . Дальнейшие улучшения в коде также приветствуются!
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)