4
我有一個數據在美國地圖上可視化。我不想在美國以外的國家(西南部的墨西哥和東北部的加拿大境內)使用任何顏色。我怎樣才能從contourf中遮蓋這些區域?請注意,這些狀態邊界是否繪製並不重要。如何從底圖去除美國大陸以外(墨西哥和加拿大境內)的輪廓顏色?
的代碼是:
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap, cm, maskoceans
from scipy.interpolate import griddata
np.random.seed(77)
lllat = 24.396308
lllon = -124.848974
urlat = 49.384358
urlon = -66.885444
m = Basemap(llcrnrlat=lllat,
urcrnrlat=urlat,
llcrnrlon=lllon,
urcrnrlon=urlon,
resolution='i', projection='cyl')
m.drawcountries(linewidth=1.0)
m.drawstates(linewidth=1.0, color='lightgray')
m.drawlsmask(land_color='gray',ocean_color="#b0c4de", lakes=True)
#create 100 random latitudes
lats = np.random.randint(low=lllat-1, high=urlat+1, size=1000) + np.random.ranf(size=1000)
#create 100 random longitudes
lons = np.random.randint(low=lllon-1, high=urlon+1, size=1000) + np.random.ranf(size=1000)
#create 100 random values/probabilities
probabilities = np.random.random(size=1000)
#now use meshgrid and contourf to visualize it
mlon, mlat = m(*(lons, lats))
# grid data
numcols, numrows = 1000, 1000
xi = np.linspace(mlon.min(), mlon.max(), numcols)
yi = np.linspace(mlat.min(), mlat.max(), numrows)
xi, yi = np.meshgrid(xi, yi)
# interpolate
x, y, z = mlon, mlat, probabilities
zi = griddata((mlon, mlat), probabilities, (xi, yi), method='nearest', rescale=False)
data = maskoceans(xi, yi, zi)
con = m.contourf(xi, yi, data, cmap=plt.get_cmap('YlOrRd'))
cbar = m.colorbar(con,location='right',pad="3%")
plt.show()
我嘗試從lats和lons中刪除點,這些點在美國並不存在,但仍然以邊界外的某些部分爲輪廓。
我可以用oceanmask掩蓋水域,但無法掩蓋墨西哥和加拿大的這些要點。
注:有循環的解決方案在所有網格點,並設置梓到楠所有那些沒有在美國點,但就是這麼計算成本給予我的實際數據的大小是不是我的解決方案。
我想也許我可以用灰色重新繪製那些墨西哥和加拿大在輪廓上的狀態,但我不知道如何。 – Ash