尝试将 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)

在子图 Matplotlib 中按列表添加图例

在Matplotlib中为子图添加边距[重复]

python使用matplotlib可视化使用subplots子图subplots绘制子图并为可视化的子图添加主标题(subplots main title)

Plotly python 子图

matplotlib子图添加字段名