python - matplotlib.mplot3d 立方体表面的 basemap

标签 python plot matplotlib matplotlib-basemap

如标题所示,我正在尝试在 matplotlib.mplot3d 线图的 z=0 表面绘制 basemap 。我知道 Axes3D 对象能够在 z=0 表面上绘图(通过 Axes3D.plot、Axes3D.scatter 等),但我无法弄清楚如何使用 Basemap 对象执行此操作。希望下面的代码足够清楚地显示我需要什么。任何想法将不胜感激!

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')

最佳答案

只需将您的 map 作为 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()

关于python - matplotlib.mplot3d 立方体表面的 basemap ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6159437/

相关文章:

python - 读取 XML 文件并在 Python 中获取其属性值

r - R中的线密度热图

r - 如何在对数刻度中使用 `polygon()`?

python - imshow 和 pcolormesh 显示具有相同输入的两个不同输出

python - Matplot中重叠的子图

python - 包含模板中的 Jinja2 变量

python - 改进我的代码,将相同的单词分组到一个大的Python列表中,并与其他代码进行比较

r - 如何在分解的时间序列图中自定义标题、轴标签等

python-3.x - 使用 matplotlib 堆积条形图

python - 在迭代图的 for 循环上使用 plt.savefig 返回空白图像