8

因此,我正在尝试创建一个图形,该图形显示数据点的 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,任何帮助将不胜感激,谢谢!

4

2 回答 2

18

我正在寻找一种使用漂亮fig, axes = plt.subplots(...)快捷方式创建 3D 绘图的方法,但由于我刚刚浏览了 Matplotlib 的 mplot3d 教程,因此我想分享本网站顶部的一句话。

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

所以如果你必须使用<1.0.0版本的Matplotlib,这个应该考虑进去。

于 2014-01-13T17:47:50.523 回答
4

创建 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。

于 2011-12-15T15:49:50.247 回答