【问题标题】:3D Scatter Plot on Basemap in PythonPython中底图上的3D散点图
【发布时间】:2014-12-05 11:08:35
【问题描述】:

我正在尝试在 python 中绘制烟羽的 3D 散点图,下面是北美地图。 我尝试了各种方法,但似乎都有缺点。 我现在的代码是:

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,horizo​​ntalalignment='right',verticalalignment='center',**kwargs) TypeError: text() 至少需要 5 个参数(给定 4 个)'(我在 2D 绘图中使用此命令从未遇到过这个问题)。

我也尝试过使用 ax.plot_surface 绘制地图的 png 图像,但这会产生图像顺序的问题 - 无论我使用什么 zorder,它似乎都会在散点图上绘制表面图像。

任何帮助将不胜感激!

【问题讨论】:

    标签: python matplotlib-basemap


    【解决方案1】:

    这看起来(至少部分)在您的 scatter 函数中缺少 latlon=True。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-18
      • 2019-06-23
      • 1970-01-01
      相关资源
      最近更新 更多