尝试将 3d 子图添加到 matplotlib 图
Posted
技术标签:
【中文标题】尝试将 3d 子图添加到 matplotlib 图【英文标题】:Trying to add a 3d subplot to a matplotlib figure 【发布时间】:2012-01-20 14:14:26 【问题描述】:所以我正在尝试创建一个图形,该图形显示数据点的 3d 图,以及其他 3 个子图中的 3 个投影图。我可以毫无问题地为投影添加子图,但是当我尝试将 3 维图放入图中时,事情适得其反。
这是我的代码:
def plotAll(data):
fig = plt.figure()
plot_3d = fig.add_subplot(221)
ax = Axes3D(plot_3d)
for i,traj in enumerate(data.values()):
ax.plot3D([traj[0][-1]],[traj[1][-1]],[traj[2][-1]],".",color=[0.91,0.39,0.046])
#plot_12v13 = fig.add_subplot(222)
#plot_projections(data,0,1)
#plot_13v14 = fig.add_subplot(223)
#plot_projections(data,1,2)
#plot_12v14 = fig.add_subplot(224)
#plot_projections(data,0,2)
#plt.plot()
返回: 'AxesSubplot' 对象没有属性 'transFigure'
我正在使用 matplotlib 0.99.3,任何帮助将不胜感激,谢谢!
【问题讨论】:
【参考方案1】:我正在寻找一种使用漂亮的 fig, axes = plt.subplots(...)
快捷方式创建 3D 绘图的方法,但由于我刚刚浏览了 Matplotlib's mplot3d tutorial,因此我想分享本网站顶部的一句话。
1.0.0 版中的新功能:这种方法是创建 3D 轴的首选方法。
import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D fig = plt.figure() ax = fig.add_subplot(111, projection='3d')
注意
在 1.0.0 版本之前,创建 3D 轴的方法有所不同。对于使用旧版本 matplotlib 的用户,请将 ax = fig.add_subplot(111, projection='3d') 更改为 ax = Axes3D(fig)。
所以如果你必须使用
【讨论】:
需要强调的是,“from mpl_toolkits.mplot3d import Axes3D”这一行是必要的,即使你从不直接使用 Axes3D。如果没有该导入, add_subplot(111, projection='3d') 将失败,表示无法识别投影“3d”。使用“import mpl_toolkits.mplot3d”也可以。 教程中的方法是使用fig.gca(projection="3d")
(而不是add_subplot
),这似乎不起作用。但是你的方法可以。也许只是我使用的是过时的版本,但他们可能应该更新示例!
我认为 from mpl_toolkits.mplot3d import Axes3D
不再需要了。【参考方案2】:
创建 3D 轴的首选方法是提供 projection
关键字:
def plotAll(data):
fig = plt.figure()
ax = fig.add_subplot(221, projection='3d')
for i,traj in enumerate(data.values()):
ax.plot3D([traj[0][-1]],[traj[1][-1]],[traj[2][-1]],".",color=[0.91,0.39,0.046])
plot_12v13 = fig.add_subplot(222)
plot_projections(data,0,1)
plot_13v14 = fig.add_subplot(223)
plot_projections(data,1,2)
plot_12v14 = fig.add_subplot(224)
plot_projections(data,0,2)
plt.plot()
很遗憾,您没有提供包含合适数据的工作示例,因此我无法测试代码。另外,我建议更新到新版本的 matplotlib。
【讨论】:
以上是关于尝试将 3d 子图添加到 matplotlib 图的主要内容,如果未能解决你的问题,请参考以下文章
python使用matplotlib可视化subplots子图为subplots添加主标题(main title)为subplots的每一个子图添加子图标题(subplots title)
python使用matplotlib可视化使用subplots子图subplots绘制子图并为可视化的子图添加主标题(subplots main title)