Matplotlibを使用してベースマップをプロットするのに苦労していて、かなり新しいので、助けを期待していました。
私は次の形式のデータを持っています:
[ (lat1, lon1, data1),
(lat2, lon2, data2),
(lat3, lon3, data3),
...
(latN, lonN, dataN) ]
そしてここにいくつかのサンプルデータがあります:
(32.0, -128.5, 3.99)
(31.0, -128.0, 3.5027272727272734)
(31.5, -128.0, 3.7383333333333333)
(32.0, -128.0, 3.624)
(32.5, -128.0, 3.913157894736842)
(33.0, -128.0, 4.443333333333334)
最後に、プロットする予定のデータに関する基本的な統計を次に示します。
LAT MIN: 22
LAT MAX: 50
LAT LEN: 1919
LON MIN: -128
LON MAX: -97
LON LEN: 1919
DATA MIN: 0
DATA MAX: 12
DATA LEN: 1919
米国本土のベースマップに等高線図を描く必要があります。私の人生では、プロット用のデータを設定する方法を理解できないようです。
X軸(LATS)はnp.arrayである必要があり、Y軸(LONS)はnp.arrayである必要があり、Z(DATA)はM = len(LATS)であるMxN行列である必要があることを読みました。 )およびN = len(LONS)。だから私には、Zを対角行列として見ています。対角線には、LATSとLONSのインデックスに対応するDATAで見つかった値である対角線上のデータが含まれています。
これが私のコードです:
def show_map(self, a):
a = sorted(a, key = lambda entry: entry[0]) # sort by latitude
a = sorted(a, key = lambda entry: entry[1]) # then sort by longitude
lats = [ x[0] for x in a ]
lons = [ x[1] for x in a ]
data = [ x[2] for x in a ]
lat_min = min(lats)
lat_max = max(lats)
lon_min = min(lons)
lon_max = max(lons)
data_min = min(data)
data_max = max(data)
x = np.array(lats)
y = np.array(lons)
z = np.diag(data)
m = Basemap(
projection = 'merc',
llcrnrlat=lat_min, urcrnrlat=lat_max,
llcrnrlon=lon_min, urcrnrlon=lon_max,
rsphere=6371200., resolution='l', area_thresh=10000
lat_ts = 20, resolution = 'c'
)
fig = plt.figure()
plt.subplot(211)
ax = plt.gca()
# draw parallels
delat = 10.0
parallels = np.arange(0., 90, delat)
m.drawparallels(parallels, labels=[1,0,0,0], fontsize=10)
# draw meridians
delon = 10.
meridians = np.arange(180.,360.,delon)
m.drawmeridians(meridians,labels=[0,0,0,1],fontsize=10)
# draw map features
m.drawcoastlines(linewidth = 0.50)
m.drawcountries(linewidth = 0.50)
m.drawstates(linewidth = 0.25)
ny = z.shape[0]; nx = z.shape[1] # make grid
lo, la = m.makegrid(nx, ny)
X, Y = m(lo, la)
clevs = [0,1,2.5,5,7.5,10,15,20,30,40,50,70,100,150,200,250,300,400,500,600,750]
cs = m.contour(X, Y, z, clevs)
plt.show()
しかし、私が得たプロットはこれです:http: //imgur.com/li1Wg。この効果のために何かが必要です:http://matplotlib.org/basemap/_images/plotprecip.png
誰かが私が間違っていることを指摘し、これをプロットするのを手伝ってくれる?ありがとうございました。
ありがとう