In [1]:
import rebound
sim = rebound.Simulation()
sim.add(m=1)
sim.add(m=0.1, e=0.041, a=0.4, inc=0.2, f=0.43, Omega=0.82, omega=2.98)
sim.add(m=1e-3, e=0.24, a=1.0, pomega=2.14)
sim.add(m=1e-3, e=0.24, a=1.5, omega=1.14, l=2.1)
sim.add(a=-2.7, e=1.4, f=-1.5,omega=-0.7) # hyperbolic orbit
To plot these initial orbits in the $xy$-plane, we can simply call the OrbitPlot
function and give it the simulation as an argument.
In [2]:
%matplotlib inline
fig = rebound.OrbitPlot(sim)
Note that the OrbitPlot
function chooses reasonable limits for the axes for you. There are various ways to customize the plot. Have a look at the arguments used in the following examples, which are pretty much self-explanatory (if in doubt, check the documentation!).
In [3]:
fig = rebound.OrbitPlot(sim, unitlabel="[AU]", color=True, periastron=True)
In [4]:
fig = rebound.OrbitPlot(sim, unitlabel="[AU]", periastron=True, lw=2)
Note that all orbits are draw with respect to the center of mass of all interior particles. This coordinate system is known as Jacobi coordinates. It requires that the particles are sorted by ascending semi-major axis within the REBOUND simulation's particle array.
From within iPython/Jupyter one can also call the OrbitPlot routine in a loop, thus making an animation as one steps through a simulation. This is a nice way of keeping track of what is going on in a simulation without having to wait until the end. To do that we need to import the display
and clear_output
function from iPython first. We'll also need access to the clear
function of matplotlib. Then, we run a loop, updating the figure as we go along.
In [5]:
from IPython.display import display, clear_output
import matplotlib.pyplot as plt
sim.move_to_com()
for i in range(3):
sim.integrate(sim.t+0.31)
fig = rebound.OrbitPlot(sim,color=True,unitlabel="[AU]",lim=2.)
display(fig)
plt.close(fig)
clear_output(wait=True)
To get an idea of the three dimensional distribution of orbits, use the slices=True
option. This will plot the orbits three times, from different perspectives. You can adjust the dimensions in the z
direction using the limz
keyword.
In [6]:
fig = rebound.OrbitPlot(sim,slices=True,color=True,unitlabel="[AU]",lim=2.,limz=0.36)
In [ ]: