试图将一个3d子图添加到matplotlib图中

Dan*_*len 4 matplotlib subplot mplot3d

所以我试图创建一个数字,从数据点呈现一个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()
Run Code Online (Sandbox Code Playgroud)

抛出:'AxesSubplot'对象没有属性'transFigure'

我正在使用matplotlib 0.99.3,非常感谢任何帮助,谢谢!

Pra*_*rma 19

如果您想使用plt.subplots而不是(请参阅此处的plt.subplot区别),那么您可以执行以下操作:

import matplotlib.pyplot as plt
from matplotlib import cm # for a scatter plot
from mpl_toolkits.mplot3d import Axes3D

fig, ax = plt.subplots(1,2,figsize=(10,10),subplot_kw=dict(projection='3d'))

sc1 = ax[0].scatter(x,y,z, c = true, cmap=cm.jet)
ax[0].set_title('True solution')

sc2 = ax[1].scatter(x,y,z c = y_pred, cmap=cm.jet)
ax[1].set_title('Predicted Solution')
Run Code Online (Sandbox Code Playgroud)

嗯,我不知道如何使用plt.subplots. 如果有人可以发表评论,那将会很有帮助。


Xid*_*dus 10

我正在寻找一种方法来使用漂亮的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')
Run Code Online (Sandbox Code Playgroud)

注意

在1.0.0版之前,创建3D轴的方法不同.对于那些使用旧版matplotlib的人,将ax = fig.add_subplot(111,projection ='3d')更改为ax = Axes3D(图).

因此,如果您必须使用<1.0.0版本的Matplotlib,则应将其考虑在内.

  • 应该强调的是,"从mpl_toolkits.mplot3d导入Axes3D"这一行是必要的,即使你从不直接使用Axes3D.如果没有导入,add_subplot(111,projection ='3d')将失败,表示无法识别投影'3d'.使用"import mpl_toolkits.mplot3d"也可以. (5认同)

Dav*_*ker 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()
Run Code Online (Sandbox Code Playgroud)

不幸的是,您没有提供包含合适数据的工作示例,因此我无法测试代码。另外,我建议更新到较新版本的 matplotlib。