Matplotlib 附加到 z 轴
Matplotlib append to z axis
我想使用 matplotlib (python) 在 3D 中绘图,其中的数据是实时添加的 (x,y,z)。
在下面的代码中,数据在 x 轴和 y 轴上成功追加,但是在 z 轴上我遇到了 problems.although 我在 matplotlib 的文档中搜索过,我找不到任何解决方案.
此代码应 added/changed 什么才能使其在 z 轴上附加数据?
什么是正确的:
return plt.plot(x, y, color='g')
问题:
return plt.plot(x, y, z, color='g')
代码:
from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.animation as animation
import random
np.set_printoptions(threshold=np.inf)
fig = plt.figure()
ax1 = fig.add_subplot(111, projection='3d')
x = []
y = []
z = []
def animate(i):
x.append(random.randint(0,5))
y.append(random.randint(0,5))
z.append(random.randint(0,5))
return plt.plot(x, y, color='g')
#return plt.plot(x, y, z, color='g') => error
ani = animation.FuncAnimation(fig, animate, interval=1000)
ax1.set_xlabel('x')
ax1.set_ylabel('y')
ax1.set_zlabel('z')
plt.show()
如何正确完成这项工作?
您想用于 3D 绘图的绘图方法是 Axes3D
中的方法。因此你需要绘制
ax1.plot(x, y, z)
但是,您似乎想要更新数据而不是重新绘制(使线条看起来有点栅格化,因为它包含所有绘图)。
因此您可以使用 set_data
和第三维 set_3d_properties
。更新情节将如下所示:
from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.animation as animation
fig = plt.figure()
ax1 = fig.add_subplot(111, projection='3d')
x = []
y = []
z = []
line, = ax1.plot(x,y,z)
def animate(i):
x.append(np.random.randint(0,5))
y.append(np.random.randint(0,5))
z.append(np.random.randint(0,5))
line.set_data(x, y)
line.set_3d_properties(z)
ani = animation.FuncAnimation(fig, animate, interval=1000)
ax1.set_xlabel('x')
ax1.set_ylabel('y')
ax1.set_zlabel('z')
ax1.set_xlim(0,5)
ax1.set_ylim(0,5)
ax1.set_zlim(0,5)
plt.show()
我想使用 matplotlib (python) 在 3D 中绘图,其中的数据是实时添加的 (x,y,z)。
在下面的代码中,数据在 x 轴和 y 轴上成功追加,但是在 z 轴上我遇到了 problems.although 我在 matplotlib 的文档中搜索过,我找不到任何解决方案.
此代码应 added/changed 什么才能使其在 z 轴上附加数据?
什么是正确的:
return plt.plot(x, y, color='g')
问题:
return plt.plot(x, y, z, color='g')
代码:
from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.animation as animation
import random
np.set_printoptions(threshold=np.inf)
fig = plt.figure()
ax1 = fig.add_subplot(111, projection='3d')
x = []
y = []
z = []
def animate(i):
x.append(random.randint(0,5))
y.append(random.randint(0,5))
z.append(random.randint(0,5))
return plt.plot(x, y, color='g')
#return plt.plot(x, y, z, color='g') => error
ani = animation.FuncAnimation(fig, animate, interval=1000)
ax1.set_xlabel('x')
ax1.set_ylabel('y')
ax1.set_zlabel('z')
plt.show()
如何正确完成这项工作?
您想用于 3D 绘图的绘图方法是 Axes3D
中的方法。因此你需要绘制
ax1.plot(x, y, z)
但是,您似乎想要更新数据而不是重新绘制(使线条看起来有点栅格化,因为它包含所有绘图)。
因此您可以使用 set_data
和第三维 set_3d_properties
。更新情节将如下所示:
from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.animation as animation
fig = plt.figure()
ax1 = fig.add_subplot(111, projection='3d')
x = []
y = []
z = []
line, = ax1.plot(x,y,z)
def animate(i):
x.append(np.random.randint(0,5))
y.append(np.random.randint(0,5))
z.append(np.random.randint(0,5))
line.set_data(x, y)
line.set_3d_properties(z)
ani = animation.FuncAnimation(fig, animate, interval=1000)
ax1.set_xlabel('x')
ax1.set_ylabel('y')
ax1.set_zlabel('z')
ax1.set_xlim(0,5)
ax1.set_ylim(0,5)
ax1.set_zlim(0,5)
plt.show()