2015-12-05 4 views
0

В настоящее время у меня небольшая проблема с построением нескольких строк на трехмерном графике. У меня есть список списков, содержащих три Numpy массивы, соответствующие АБВ координаты трех точек на каждой линии, т.е.Создание 3D-графика из нескольких строк на одной фигуре

lines=[[array([10,0,0]),array([10,0,101.5]),array([-5,0,250])],[array([9,0,0]), array([9,0,101.5]),array([-4,0,250])]] 

будет представлять 2 линии с 3-мя наборами АБВ координат в каждом (первый здесь будет (10,0,0), (10,0,101,5) и (-0,0250)).

В общем, у меня было бы n строк в этом списке с тремя наборами координат xyz. Я хотел бы построить эти строки на одном 3D-графике с matplotlib. Все, что мне удалось сделать до сих пор, - создать n графиков, каждая из которых содержит одну строку.

Спасибо за помощь!

EDIT: У меня есть список 'lines', содержащий объекты 'line', которые представляют собой только списки, содержащие 3 массива numpy для 3 точек в каждой строке. Я пытался использовать следующий метод:

for line in lines: 
    fig = plt.figure() 
    ax = fig.gca(projection='3d') 

    z = [] 
    for i in [0,1,2]: 
     z.append(line[i][2]) 

    x = [] 
    for i in [0,1,2]: 
     x.append(line[i][0]) 

    y = [] 
    for i in [0,1,2]: 
     y.append(line[i][1]) 

    ax.plot(x, y, z, label='path') 

    plt.show() 

Я думаю, что я понимаю, почему это дает мне 2 участка линий 1 и 2, но я не могу понять способ поставить обе линии на том же участке.

+0

Вы должны отделить свои данные от каждой строки, а затем разделить их отдельно на один и тот же объект оси. Можете ли вы добавить минимальный рабочий пример, чтобы узнать, что вы сделали? –

+0

Я добавил свою попытку в основной вопрос. Спасибо за помощь! –

ответ

0

Вы почти получили его. Решение вашей проблемы простое, просто переместите требуемые статусы из цикла for:

import matplotlib.pyplot as plt 

lines=[[array([10,0,0]),array([10,0,101.5]),array([-5,0,250])],[array([9,0,0]), array([9,0,101.5]),array([-4,0,250])]] 


fig = plt.figure() 
ax = fig.gca(projection='3d') 
for line in lines: 

    z = [] 
    for i in [0,1,2]: 
     z.append(line[i][2]) 

    x = [] 
    for i in [0,1,2]: 
     x.append(line[i][0]) 

    y = [] 
    for i in [0,1,2]: 
     y.append(line[i][1]) 

    ax.plot(x, y, z, label='path') 

plt.show() 
+0

Большое спасибо, это сработало отлично! –

Смежные вопросы