Как сделать пространственный участок нерегулярных географических данных - PullRequest
0 голосов
/ 06 февраля 2019

У меня есть lat=[13.7,21,23.7,10.6,34.5,20.7,33.1,15.5]
lon=[65.7,87.5,69.8,98.3,67,79.8,88.8,77.9] и
val=[234,310,287,279,298,280,279,321]

Как я могу сделать пространственное построение этих данных на карте?Мой код выглядит как

lat=[13.7,21,23.7,10.6,34.5,20.7,33.1,15.5]
lon=[65.7,87.5,69.8,98.3,67,79.8,88.8,77.9]
val=[234,310,287,279,298,280,279,321]
lon, lat = np.meshgrid(lon, lat)
m = Basemap(projection='merc', resolution=None,
        llcrnrlat=0, urcrnrlat=40,
        llcrnrlon=60, urcrnrlon=100, )
m.contourf(lon,lat,val)

1 Ответ

0 голосов
/ 08 февраля 2019

Чтобы использовать contourf, вам нужны данные в сетке (т. Е. Если у вас сетка 8x8 lon-lat, вам нужно 64 значения z).Поскольку у вас есть только (lon, lat, z) триплеты, лучше использовать график tricontourf .Однако у базовой карты нет этой функции, но есть дополнительное ключевое слово tri для функции contourf:

import numpy as np
from matplotlib import pyplot as plt
from mpl_toolkits import basemap

lat=np.array([13.7,21,23.7,10.6,34.5,20.7,33.1,15.5])
lon=np.array([65.7,87.5,69.8,98.3,67,79.8,88.8,77.9])
val=np.array([234,310,287,279,298,280,279,321])

#lon, lat = np.meshgrid(lon, lat) <-- do not use this

m = basemap.Basemap(projection='merc', resolution=None,
        llcrnrlat=0, urcrnrlat=40,
        llcrnrlon=60, urcrnrlon=100, )

##need to convert coordinates
x,y = m(lon,lat)

##add the `tri=True` kwarg
m.contourf(x,y,val, tri=True)

plt.show()

result of above code

...