使用matplotlib理解3D仿真语法时出现问题

时间:2019-06-22 21:09:34

标签: python-3.x matplotlib

我正在尝试理解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):

它如何工作?

1 个答案:

答案 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