2014-12-05 4 views
1

Я пытаюсь построить график 3D-рассеивания дымового шлейфа в питоне с картой Северной Америки внизу. Я пробовал различные методы, но у всех, похоже, есть недостатки. Мой код на данный момент:3D-график рассеяния на базовой карте в 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) ТипError: text() принимает не менее 5 аргументов (4 данных) '(у меня никогда не было этой проблемы, используя эту команду в 2D-графике).

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

Любая помощь будет очень признательна!

ответ

0

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

Смежные вопросы