Я знаю, что matplotlib и scipy могут выполнять бикубическую интерполяцию: http://matplotlib.org/examples/pylab_examples/image_interp.html http://docs.scipy.org/doc/scipy/reference/tutorial/interpolate.html http://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.interp2d.html
Я также знаю, что можно нарисовать карту мира с помощью matplotlib: http://matplotlib.org/basemap/users/geography.html http://matplotlib.org/basemap/users/examples.html http://matplotlib.org/basemap/api/basemap_api.html
Но могу ли я сделать бикубическую интерполяцию на основе 4 точек данных и только окрасить массу земли?
Например, используя их для 4 точек данных (долгота и широта) и цветов:
Lagos: 6.453056, 3.395833; red HSV 0 100 100 (or z = 0)
Cairo: 30.05, 31.233333; green HSV 90 100 100 (or z = 90)
Johannesburg: -26.204444, 28.045556; cyan HSV 180 100 100 (or z = 180)
Mogadishu: 2.033333, 45.35; purple HSV 270 100 100 (or z = 270)
Я думаю, что нужно сделать бикубическую интерполяцию по широте широт и долгот, а затем добавить океаны, озера и реки поверх этого слоя? Я могу сделать это с помощью drawmapboundary
. На самом деле для этого есть опция maskoceans
:
http://matplotlib.org/basemap/api/basemap_api.html#mpl_toolkits.basemap.maskoceans
Я могу интерполировать данные следующим образом:
xnew, ynew = np.mgrid[-1:1:70j, -1:1:70j]
tck = interpolate.bisplrep(x, y, z, s=0)
znew = interpolate.bisplev(xnew[:,0], ynew[0,:], tck)
Или с помощью scipy.interpolate.interp2d
:
http://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.interp2d.html
Здесь объясняется, как преобразовать в координаты проекции карты: http://matplotlib.org/basemap/users/mapcoords.html
Но мне нужно выяснить, как это сделать для расчетной поверхности вместо отдельных точек. На самом деле есть пример такой топографической карты с использованием внешних данных, которые я должен иметь возможность реплицировать: http://matplotlib.org/basemap/users/examples.html
P.S. Я не ищу полного решения. Я бы предпочел решить это сам. Скорее, я ищу предложения и подсказки. Я использую gnuplot более 10 лет и перешел на matplotlib в течение последних нескольких недель, поэтому, пожалуйста, не предполагайте, что я знаю даже самые простые вещи о matplotlib.