我正在尝试理解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]
我了解我们正在尝试在3D空间中绘制初始点,因为我们无法在此处发送空数组,但是“ [0]”在那里做什么?以及为什么我们使用for循环? 另一个问题是
for line, data in zip(lines, dataLines):
它如何工作?
答案 0 :(得分:0)
根据documentation函数ax.plot()
返回
lines:表示绘制数据的Line2D对象列表。
行
lines = [ax.plot(dat[0, 0:1], dat[1, 0:1], dat[2, 0:1])[0] for dat in data]
是一个list comprehension,它将绘图中的第一行(也是唯一行)放入另一个列表中。稍后可以在更新功能中访问该其他列表。
另一行
for line, data in zip(lines, dataLines):
迭代两个可迭代项(列表,元组等),并在每次迭代中从这些数组返回值。第一次迭代-两个数组的第一个值。第二次迭代-数组中的第二个元素。更多信息,例如here。