У меня есть контурный график на базовой карте, и я хочу настроить диапазон цветовой полосы так, чтобы он соответствовал видимым данным. По умолчанию цветовой диапазон соответствует всем данным, т. е. даже тем, которые не нанесены на график. Есть ли для этого настройка?
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap, addcyclic, shiftgrid
myllcrnrlat=35
myurcrnrlat=65
myllcrnrlon=-45
myurcrnrlon=45
m = Basemap(projection='cyl', llcrnrlat=myllcrnrlat, urcrnrlat=myurcrnrlat,\
llcrnrlon=myllcrnrlon, urcrnrlon=myurcrnrlon, resolution='c')
lonsin=np.asarray(range(0,360,10))
latsin=np.asarray(range(-90,90,10))
valin=np.random.rand(len(latsin), len(lonsin))
valin[0,0]=5 #this is a value outside my basemap area and higher than all inside.
valin_cyclic, lons_cyclic = addcyclic(valin, lonsin)
valin_cyclic, lons_cyclic = shiftgrid(180., valin_cyclic, lons_cyclic, start=False)
lon2d, lat2d = np.meshgrid(lons_cyclic, latsin)
x, y = m(lon2d, lat2d)
cs = m.pcolormesh(x, y, valin_cyclic,cmap=plt.get_cmap('autumn_r'))
cbar = plt.colorbar(cs)
plt.show()
Конечно, я могу использовать vmin, vmax, выполнив что-то вроде следующего, но это кажется довольно длинным, так что, может быть, есть специальная настройка?
lonsin_inbasemap=np.asarray([a for a in lonsin if myllcrnrlon <= a if a <= myurcrnrlon])
latsin_inbasemap=np.asarray([a for a in latsin if myllcrnrlat <= a if a <= myurcrnrlat])
valin_inbasemap_tmp = np.transpose(np.asarray([valin[:,a] for a in range(len(lonsin)) if lonsin[a] in lonsin_inbasemap]))
valin_inbasemap = np.asarray([valin_inbasemap_tmp[a,:] for a in range(len(latsin)) if latsin[a] in latsin_inbasemap])
del(valin_inbasemap_tmp)
vmax=np.amax(valin_inbasemap)
cs = m.pcolormesh(x, y, valin_cyclic,vmax=vmax, cmap=plt.get_cmap('autumn_r'))
cbar = plt.colorbar(cs)
plt.show()