问题描述
|
就像标题所示,我正在尝试在matplotlib.mplot3d线图的z = 0面上绘制底图地图。我知道Axes3D对象能够在z = 0曲面上绘制(通过Axes3D.plot,Axes3D.scatter等),但是我不知道如何使用底图对象进行绘制。希望下面的代码能清楚地说明我的需求。任何想法将不胜感激!
import matplotlib.pyplot as pp
from mpl_toolkits.mplot3d import Axes3D
from mpl_toolkits.basemap import Basemap
# make sample data for 3D lineplot
z = np.linspace(-2,2,100)
r = z**2 + 1
x = r * np.sin(theta)
y = r * np.cos(theta)
# make the 3D line plot
FIG = ct.pp.figure()
AX = Axes3D(FIG)
AX.plot(x,y,z,\'-b\')
# make the 2D basemap
### NEEDS TO SOMEHOW BE AT z=0 IN FIG
M = ct.Basemap(projection=\'stere\',width=3700e3,height=2440e3,lon_0=-5.0,lat_0=71.0,lat_ts=71.0,area_thresh=100,resolution=\'c\')
PATCHES = M.fillcontinents(lake_color=\'#888888\',color=\'#282828\')
解决方法
只需将地图作为3d集合添加到Axes3D实例即可:
import numpy as np
import matplotlib.pyplot as pp
from mpl_toolkits.mplot3d import Axes3D
from mpl_toolkits.basemap import Basemap
theta = np.linspace(-4 * np.pi,4 * np.pi,100)
z = np.linspace(-500,500,100)
r = z**2 + 1
x = r * np.sin(theta)
y = r * np.cos(theta)
FIG = pp.figure()
AX = Axes3D(FIG)
AX.plot(x,y,z,\'-b\')
M = Basemap(projection=\'stere\',width=3700e3,height=2440e3,lon_0=-5.0,lat_0=71.0,lat_ts=71.0,area_thresh=100,resolution=\'c\')
AX.add_collection3d(M.drawcoastlines())
AX.grid(True)
pp.draw()
pp.show()
, AX.add_collection3d(M.drawcoastlines())
起作用但是
PATCHES = M.fillcontinents(lake_color=\'#888888\',color=\'#282828\')
不起作用。
添加颜色填充后,您将收到类似以下错误:\“ AttributeError:\'多边形\'对象没有属性\'do_3d_projection \'\”
M.fillcontinents(lake_color=\'#888888\',color=\'#282828\')`
返回多边形数组,而不是add_collection()所需的输入之一。 collect.PatchCollection()
似乎也不起作用。
那么,如何将M.fillcontinents(lake_color = \'#888888 \',color = \'#282828 \')添加到3D图中呢?