Проблема в понимании синтаксиса для 3D моделирования с помощью matplotlib - PullRequest
0 голосов
/ 23 июня 2019

Я пытаюсь понять код для 3D-моделирования.Но я не смог понять конкретный синтаксис в коде.Код приведен здесь.

import numpy as np
import matplotlib.pyplot as plt
import mpl_toolkits.mplot3d.axes3d as p3
import matplotlib.animation as animation



def update_lines(num, dataLines, lines):
    for line, data in zip(lines, dataLines):
           line.set_data(data[0:2,0:num])
        line.set_3d_properties(data[2,0:num])
        line.set_marker("o")
    return lines



fig = plt.figure()
ax = p3.Axes3D(fig)


t = np.linspace(-2*np.pi,2*np.pi,50)
x1, y1, z1 = np.cos(t), np.sin(t), t/t.max()
x2, y2, z2 = t/t.max(), np.cos(t), np.sin(t)
data = np.array([[x1,y1,z1],[x2,y2,z2]])
print(data)

   #ax=fig.add_subplot(221,projection='3d')
lines = [ax.plot(dat[0, 0:1], dat[1, 0:1], dat[2, 0:1])[0] for dat in data]

ax.set_xlim(-1.1,1.1)
ax.set_ylim(-1.1,1.1)
ax.set_zlim(-1.1,1.1)
ax.set_xlabel("x")
ax.set_ylabel("y")
ax.set_zlabel("z")


line_ani = animation.FuncAnimation(fig, update_lines, frames=100, fargs=(data, lines),
                                   interval=100, blit=False, repeat=True)
plt.show()

Может кто-нибудь объяснить эту строку?

lines = [ax.plot(dat[0, 0:1], dat[1, 0:1], dat[2, 0:1])[0] for dat in data]

Я понимаю, что мы пытаемся построить начальные точки в трехмерном пространстве, поскольку мы не можем отправить пустуюмассивы здесь, но что это делает '[0]' там?и почему мы используем цикл for?а другая проблема

for line, data in zip(lines, dataLines):

как это работает?

1 Ответ

0 голосов
/ 23 июня 2019

Согласно документации функция ax.plot() возвращает

строк: список объектов Line2D, представляющих построенные данные.

строка

lines = [ax.plot(dat[0, 0:1], dat[1, 0:1], dat[2, 0:1])[0] for dat in data]

- это понимание списка , которое помещает первую (и единственную) линию на графике в другой список.Этот другой список доступен позже в функции обновления.

Другая строка

for line, data in zip(lines, dataLines):

выполняет итерацию по двум итерациям (список, кортеж и т. Д.) И в каждой итерации возвращает значения из этихмассивы.Первая итерация - первое значение из обоих массивов.Вторая итерация - второй элемент из массивов.Более подробная информация, например, здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...