Попытка добавить 3D-сюжет к рисунку Matplotlib - PullRequest
4 голосов
/ 14 декабря 2011

Итак, я пытаюсь создать фигуру, которая представляет трехмерный график из точек данных вместе с графиками 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, любая помощь будет принята с благодарностью, спасибо!

Ответы [ 2 ]

10 голосов
/ 13 января 2014

Я искал способ создания своих 3D-графиков с помощью красивого ярлыка fig, axes = plt.subplots(...), но так как я только что просмотрел руководство по mplot3d Matplotlib , я хочу поделиться цитатой из верхней части этого сайта..

Новое в версии 1.0.0: этот подход является предпочтительным методом создания трехмерных осей.

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

Примечание

До версии 1.0.0 метод создания трехмерных осей был другим.Для тех, кто использует более старые версии matplotlib, измените ax = fig.add_subplot (111, projection = '3d') на ax = Axes3D (рис.).

Так что если вам нужно использовать <1.0.0 версия Matplotlib, это следует учитывать. </p>

3 голосов
/ 15 декабря 2011

Предпочтительным способом создания трехмерной оси является предоставление ключевого слова 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 до более новой.

...