Трехмерный точечный график на базовой карте в Python

Я пытаюсь построить трехмерную диаграмму рассеяния шлейфа дыма в питоне с картой Северной Америки под ним. Я пробовал разные методы, но, похоже, у всех есть свои недостатки. Мой код на данный момент:

fig = plt.figure(figsize=(22,4))
ax = Axes3D(fig)

M = Basemap(llcrnrlon=-140,llcrnrlat=10,urcrnrlon=-40,urcrnrlat=70,
        projection='cyl', resolution ='c',area_thresh=100.)
ax.add_collection3d(M.drawcoastlines(linewidth=0.5))
ax.add_collection3d(M.drawcountries(linewidth=0.5))
ax.add_collection3d(M.drawparallels(np.arange(35,65,5),labels=[1,0,0,0]))

date = save_dir[-10:]
tau = tau_mod.int2tau(date)
dt = tau_mod.tau2time(tau)

q = ax.plot(max_x, max_y, max_z, c = 'black', lw = 3)

y,x=M(y,x)

p = ax.scatter(x,y,z,lw = 0,c = conc ,alpha = 0.75, s = 40,
                norm=matplotlib.colors.LogNorm(),vmin = 20,
               vmax = 4000, marker = ',',zorder=2)


ax.view_init(azim = a ,elev = e)


cb = fig.colorbar(p)
cb.set_label('CO [ppb]')
cmin , cmax = cb.get_clim()
ticks = np.linspace(cmin,cmax,10)
for t in range(len(ticks)):
    ticks[t] = int("%i" % ticks[t])
cb.set_ticks(ticks)
cb.set_ticklabels(ticks)

ax.set_xlabel('Longitude')
ax.set_ylabel('Latitude')
ax.set_zlabel('Altitude [km]')
plt.show()

У меня возникают две основные проблемы: диаграмма рассеяния не отображается на карте - вы можете видеть ее на расстоянии за пределами границ оси. Drawparallels не работает - появляется следующее сообщение: 't = ax.text (xlab, yy [n], latlab, horizontalalignment =' right ', verticalalignment =' center ', ** kwargs) TypeError: text () принимает как минимум 5 аргументов (4 дано) »(у меня никогда не было этой проблемы при использовании этой команды в 2D-графике).

Я также попытался просто построить изображение карты в формате png с помощью ax.plot_surface, но это создает проблему с порядком изображения - кажется, что изображение поверхности наносится на диаграмму рассеяния независимо от того, какие zorders я использую.

Любая помощь будет высоко ценится!


person doug    schedule 05.12.2014    source источник


Ответы (1)


Это похоже (по крайней мере частично) на отсутствие latlon = True в вашей функции разброса.

person David Manheim    schedule 23.12.2014