import numpy as np
from einsteinpy.geodesic import Timelike #, Geodesic, Nulllike
from einsteinpy.plotting import GeodesicPlotter, StaticGeodesicPlotter #, InteractiveGeodesicPlotter
# To ensure plots show up in the documentation
import plotly
plotly.offline.init_notebook_mode()
# Initial Conditions
position = [4., np.pi / 3, 0.]
momentum = [0., 0., -1.5]
a = 0. # Schwarzschild Black Hole
geod = Timelike(
metric = "Schwarzschild",
metric_params = (a,),
position=position,
momentum=momentum,
steps=15543, # As close as we can get before the integration becomes highly unstable
delta=0.0005,
return_cartesian=True,
omega=0.01, # Small omega values lead to more stable integration
suppress_warnings=True, # Uncomment to view the tolerance warning
)
geod
Geodesic Object:( Type : (Time-like), Metric : (Schwarzschild), Metric Parameters : ((0.0,)), Initial 4-Position : ([0. 4. 1.04719755 0. ]), Initial 4-Momentum : ([-0.77055175 0. 0. -1.5 ]), Trajectory = ( (array([ 0, 1, 2, ..., 15540, 15541, 15542]), array([[ 7.70551750e-04, 3.46410160e+00, -2.16506351e-04, ..., -5.07812502e-05, 5.41265877e-05, -1.50000000e+00], [ 1.54110350e-03, 3.46410157e+00, -4.33012700e-04, ..., -1.01562501e-04, 1.08253176e-04, -1.50000000e+00], [ 2.31165526e-03, 3.46410152e+00, -6.49519046e-04, ..., -1.52343754e-04, 1.62379763e-04, -1.50000000e+00], ..., [ 2.10892615e+01, 5.06915642e-01, -1.93331152e+00, ..., -7.67875285e+01, 8.37708122e-01, -1.50000000e+00], [ 2.11285953e+01, 5.06465005e-01, -1.93307239e+00, ..., -7.82825155e+01, 8.37749353e-01, -1.50000000e+00], [ 2.11686915e+01, 5.06014321e-01, -1.93283308e+00, ..., -7.98370238e+01, 8.37790569e-01, -1.50000000e+00]])) ), Output Position Coordinate System = (Cartesian) ))
GeodesicPlotter
¶Note that GeodesicPlotter
automatically switches between "Static" and "Interactive" plots. Since we are in a Jupyter Notebook or Interactive Environment, it uses the "Interactive" backend.
gpl = GeodesicPlotter()
gpl.plot(geod, color="green", title="Geodesic Plot", aspect="auto")
gpl.show()
gpl.clear() # In Interactive mode, `clear()` must be called before drawing another plot, to avoid overlap
gpl.plot2D(geod, coordinates=(1, 2), color="green", title="Top/Bottom View") # "top" / "bottom" view
gpl.show()
gpl.clear()
gpl.plot2D(geod, coordinates=(1, 3), color="green", title="Face-On View") # "face-on" view
gpl.show()
Each interactive plot instance (gpl
) has a fig
attribute that is a plotly.graph_objs._figure.Figure
object. So, one can easily make modifications to the plots as they would to any plotly figure. For instance, we can update the title to clarify that the plot above is showing a face-on view.
gpl.fig.layout.title = {
'text': 'Face-On View', 'x': 0.46, 'xanchor': 'center', 'y': 0.9, 'yanchor': 'top'
}
gpl.show()
gpl.clear()
gpl.parametric_plot(geod, colors=("red", "green", "blue"))
gpl.show()