Python 使用matplotlib制作三维移动散点图
我想在matplotlib中从现有的二维打印生成三维打印Python 使用matplotlib制作三维移动散点图,python,matplotlib,Python,Matplotlib,我想在matplotlib中从现有的二维打印生成三维打印在二维绘图中,有一些点在圆内随机移动。现在我已经把轴做成了3D,就我所见,这些点也在3D位置。但它们没有移动,我收到一条错误消息:“ValueError:太多的值无法解压缩(预期为2)”我没有找到出错的地方(我猜程序仍然只需要x,y坐标)你能帮我吗 from matplotlib import animation import random from mpl_toolkits.mplot3d import Axes3D from matpl
在二维绘图中,有一些点在圆内随机移动。现在我已经把轴做成了3D,就我所见,这些点也在3D位置。但它们没有移动,我收到一条错误消息:“ValueError:太多的值无法解压缩(预期为2)”
我没有找到出错的地方(我猜程序仍然只需要x,y坐标)
你能帮我吗
from matplotlib import animation
import random
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import pyplot
import numpy as np
import matplotlib.pyplot as plt
def get_initial_coordinates():
x_coord =[random.uniform(3, 7) for i in range(n_particles)]
y_coord = [random.uniform(3, 7) for i in range(n_particles)]
z_coord = [random.uniform(3, 7) for i in range(n_particles)]
return x_coord, y_coord, z_coord
def get_initial_velocities():
x_vel = [3 * (np.random.random() - 0.5) * box_width for i in range(n_particles)]
y_vel = [3 * (np.random.random() - 0.5) * box_width for i in range(n_particles)]
z_vel = [3 * (np.random.random() - 0.5) * box_width for i in range(n_particles)]
return x_vel, y_vel, z_vel
def take_step(x_coord, y_coord, z_coord, x_vel, y_vel, z_vel):
for i in range(n_particles):
x_coord[i] += x_vel[i]*dt
y_coord[i] += y_vel[i]*dt
z_coord[i] += z_vel[i]*dt
return x_coord, y_coord,z_coord, x_vel, y_vel,z_vel
n_particles = 40
box_width = 10
n_steps = 5000
dt = 0.001
x_coord, y_coord, z_coord = get_initial_coordinates()
x_vel, y_vel, z_vel = get_initial_velocities()
for i in range(n_steps):
x_coord,y_coord,z_coord,x_vel,y_vel,z_vel= take_step(x_coord,y_coord,z_coord,x_vel,y_vel,z_vel)
#---------------------
fig = pyplot.figure()
ax= Axes3D(fig)
d, = ax.plot([x_coord[i] for i in range(n_particles)],
[y_coord[i] for i in range(n_particles)],
[z_coord[i] for i in range(n_particles)], 'ro')
x_coord, y_coord, z_coord = get_initial_coordinates()
x_vel, y_vel, z_vel = get_initial_velocities()
circle = plt.Circle((5, 5), 3, color='blue', fill=False)
ax.add_artist(circle)
def animate(i):
take_step(x_coord, y_coord, z_coord, x_vel, y_vel, z_vel)
d.set_data([x_coord[i]for i in range(n_particles)],
[y_coord[i]for i in range(n_particles)],
[z_coord[i]for i in range(n_particles)])
return d,
anim = animation.FuncAnimation(fig, animate, frames=200, interval=20)
pyplot.show()
set_data()
是从Line2D
输入的,因此它只能包含两个列表,一个用于x,一个用于y。必须为z组件使用.set_3d_properties()
def animate(i):
take_step(x_coord, y_coord, z_coord, x_vel, y_vel, z_vel)
d.set_data([x_coord[i]for i in range(n_particles)],
[y_coord[i]for i in range(n_particles)],
)
d.set_3d_properties([z_coord[i]for i in range(n_particles)])
return d,