Given our real solar system how would planet orbits plot look like if we fix earth in the middle (put earth in the middle and draw a real orbit of a given planet) ?

What would be the shape of its orbit? Is there any software that allows you to do such plot ? Does anybody have an example of it ?

I have tried searching for such image but most results are connected with historical theory .

  • 1
    $\begingroup$ I comment only, as for it is basically a link. celestia.space this free package should let you hover a fixed Earth and look at the Sun and planetary motion with respect of. $\endgroup$
    – Alchimista
    Mar 30, 2019 at 10:20
  • 1
    $\begingroup$ orbitsimulator.com/gsim.html $\endgroup$
    – James K
    Mar 30, 2019 at 22:23

2 Answers 2


@Ingolifs' answer is exactly right. I'll just add to it some more plotting using the Python package Skyfield.

The "inner" plotted bodies (from outer to inner) are Mars, (Earth), Moon, Venus, Mercury, The Sun. The data is for 2000 days.

The "outer" plotted bodies are Uranus, Saturn, Jupiter, Earth, and The Sun. The data is for 2000 months.

Distances are in AU.

Click the plot to see larger, or just run the Python script and make your own plot.

inner and outer planets, heliocentric and geocentric

class Body(object):
    def __init__(self, name):
        self.name = name

import numpy as np
import matplotlib.pyplot as plt
from skyfield.api import Topos, Loader, EarthSatellite

halfpi, pi, twopi = [f*np.pi for f in (0.5, 1, 2)]
degs, rads = 180/pi, pi/180

AU = 149597870.700  # km

load    = Loader('~/Documents/fishing/SkyData')  # avoids multiple copies of large files
data421    = load('de421.bsp')
data405    = load('de405.bsp')
data       = data405   # need the longer time range for the outer planets
ts      = load.timescale()

things  = ('sun', 'mercury', 'venus', 'earth', 'moon', 'mars',
           'jupiter barycenter', 'saturn barycenter', 'uranus barycenter', )

bodies = []
for thing in things:
    name = thing.split()[0]
    body = Body(name)
    body.obj = data[thing]

sun, mercury, venus, earth, moon, mars, jupiter , saturn, uranus = bodies

days_inner = np.arange(2000)
times_inner = ts.utc(2019, 1, days_inner)

months_outer = np.arange(2000)
times_outer = ts.utc(2019, months_outer, 1)

for body in bodies:
    body.posn_barycentric_inner = body.obj.at(times_inner).position.km
    body.posn_barycentric_outer = body.obj.at(times_outer).position.km
for body in bodies:
    body.posn_geocentric_inner = body.posn_barycentric_inner - earth.posn_barycentric_inner
    body.posn_geocentric_outer = body.posn_barycentric_outer - earth.posn_barycentric_outer
    body.posn_heliocentric_inner = body.posn_barycentric_inner - sun.posn_barycentric_inner
    body.posn_heliocentric_outer = body.posn_barycentric_outer - sun.posn_barycentric_outer

print (jupiter.posn_geocentric_inner.shape)

if True:
    lw, fs = 0.7, 12

    plt.subplot(2, 2, 1)
    plt.title('geocentric inner', fontsize=fs)
    for body in (sun, mercury, venus, earth, moon, mars):
        x, y, z = body.posn_geocentric_inner / AU
        plt.plot(x, y, linewidth=lw)

    plt.subplot(2, 2, 3)
    plt.title('heliocentric inner', fontsize=fs)
    for body in (sun, mercury, venus, earth, moon, mars):
        x, y, z = body.posn_heliocentric_inner / AU
        plt.plot(x, y, linewidth=lw)

    plt.subplot(2, 2, 2)
    plt.title('geocentric outer', fontsize=fs)
    for body in (earth, mars, saturn, uranus):
        x, y, z = body.posn_geocentric_outer / AU
        plt.plot(x, y, linewidth=lw)

    plt.subplot(2, 2, 4)
    plt.title('heliocentric outer', fontsize=fs)
    for body in (earth, mars, saturn, uranus):
        x, y, z = body.posn_heliocentric_outer / AU
        plt.plot(x, y, linewidth=lw)


The shape of the orbit would be an epicycloid. Wikimedia commons

See https://en.wikipedia.org/wiki/Deferent_and_epicycle for more information on the geocentric orbital view.


You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .