12import matplotlib.pyplot
as plt
14from matplotlib
import animation
15from mpl_toolkits.mplot3d
import Axes3D
22 with open(file, encoding=
"utf8")
as f:
26 xi, yi, zi = map(float, line.strip().split(
","))
35def update(num, lines, arr):
36 for line, a
in zip(lines, arr):
37 line.set_data(a[:2, num - 1 : num])
38 line.set_3d_properties(a[2, num])
42 plt.style.use(
"dark_background")
44 ax = fig.add_subplot(projection=
"3d")
46 arr = get_data([f
"output/simulate_100_particles/particle_{i}_r.txt" for i
in range(100)])
52 lines = [ax.plot(*a[:, 1],
"o")[0]
for a
in arr]
54 ax.set_title(
"100 particles inside a Penning trap")
58 "100 randomly generated particles "
59 "evolving over a time of 50 microseconds.",
61 horizontalalignment=
"center",
64 ax.set_xlim3d([-500.0, 500.0])
65 ax.set_xlabel(
"X (micrometers)")
67 ax.set_ylim3d([-500.0, 500.0])
68 ax.set_ylabel(
"Y (micrometers)")
70 ax.set_zlim3d([-500.0, 500.0])
71 ax.set_zlabel(
"Z (micrometers)")
73 ani = animation.FuncAnimation(
74 fig, update, N, fargs=(lines, arr), interval=1, blit=
False
77 ani.save(
"../images/100_particles.gif", writer=animation.FFMpegFileWriter(fps=50))
80if __name__ ==
"__main__":