如何创建随时间变化的坐标的dim-3绘图(迭代绘图或动画)?

时间:2019-04-05 03:04:35

标签: python-3.x matplotlib animation propagation timestep

我正在尝试构建N体仿真。每个迭代时间步长后,将更新每个实体(给定的N个实体)的坐标。例如,下面给出了3个(2)时间步中每个10e4主体的位置坐标;第一,第二和第三列分别对应于x,y和z坐标,而每一行代表一个唯一的正文:

*- STEP #0:

INITIAL POSITIONS:
[[ 0.  0.  0.]
 [10. 10. 10.]
 [11. 11. 11.]]

FINAL POSITIONS:
[[2.34593746e-11 2.34593746e-11 2.34593746e-11]
 [1.00000000e+01 1.00000000e+01 1.00000000e+01]
 [1.10000000e+01 1.10000000e+01 1.10000000e+01]]

*- STEP #1:

INITIAL POSITIONS:
[[2.34593746e-11 2.34593746e-11 2.34593746e-11]
 [1.00000000e+01 1.00000000e+01 1.00000000e+01]
 [1.10000000e+01 1.10000000e+01 1.10000000e+01]]

FINAL POSITIONS:
[[7.03781237e-11 7.03781237e-11 7.03781237e-11]
 [1.00000000e+01 1.00000000e+01 1.00000000e+01]
 [1.10000000e+01 1.10000000e+01 1.10000000e+01]]

*- STEP #2:

INITIAL POSITIONS:
[[7.03781237e-11 7.03781237e-11 7.03781237e-11]
 [1.00000000e+01 1.00000000e+01 1.00000000e+01]
 [1.10000000e+01 1.10000000e+01 1.10000000e+01]]

FINAL POSITIONS:
[[1.40756247e-10 1.40756247e-10 1.40756247e-10]
 [1.00000000e+01 1.00000000e+01 1.00000000e+01]
 [1.10000000e+01 1.10000000e+01 1.10000000e+01]]

我希望看到这些数据的图形表示。

在定义的类中提供了更新这些坐标的方法,该类太长而无法在此处包含。但是,主要/相关部分如下。

def propagate_in_time(self):
    """ """
    for ith_step in range(self.nsteps):
        # print("\n*- STEP #{}:\n".format(ith_step))
        # print("\nINITIAL POSITIONS:\n{}\n".format(self.position))
        self.update_acceleration()
        self.update_velocity()
        self.update_displacement()
        self.update_position()
        # print("\nFINAL POSITIONS:\n{}\n".format(self.position))

因此,当尝试创建这些坐标的3维图形时,我正在考虑在for循环外创建图形实例,在for循环内进行绘图,并在for循环外显示该绘图{{3 }}。我的尝试如下:

def propagate_in_time(self, facecolors=('k', 'orange', 'yellow'):
    """ """
    fig, ax = plt.subplots()
    for body, facecolor in zip(self.celestial_bodies, facecolors):
        ax.plot(body.position, color=facecolor)
    for ith_step in range(self.nsteps):
        ax = fig.add_subplot(111)
        self.update_acceleration()
        self.update_velocity()
        self.update_displacement()
        self.update_position()
        for pos, facecolor in zip(self.position, facecolors):
            ax.plot(pos, color=facecolor)
    plt.show()

尽管position中的每个self.position是由3个元素组成的平面数组,但我获得的输出图(从所有时间步长)显示如下。

as shown in this example

我觉得很奇怪,因为我确保包括以下进口。

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

主要问题:

如何获取此数据的dim-3图?此外,还有更好的方法可视化此数据吗?

次要/次要问题:

假设每个位置的z分量为0。这会改变您将数据可视化的方法吗?

0 个答案:

没有答案