<p>@Ingolifs' <a href="https://astronomy.stackexchange.com/a/30179/7982">answer</a> is exactly right. I'll just add to it some more plotting using the Python package <a href="https://rhodesmill.org/skyfield/" rel="nofollow noreferrer">Skyfield</a>.</p>

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

<p>The "outer" plotted bodies are Uranus, Saturn, Jupiter, Earth, and The Sun. The data is for <strong>2000 months</strong>.</p>

<p>Distances are in AU.</p>

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

<p><a href="https://i.sstatic.net/0bT3U.png" rel="nofollow noreferrer"><img src="https://i.sstatic.net/0bT3U.png" alt="inner and outer planets, heliocentric and geocentric"></a></p>

<pre><code>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)
    bodies.append(body)
    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:
    plt.figure()
    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)

    plt.show()
</code></pre>

CC BY-SA 4.0
2019-03-31T14:40:52.943Z
2019-05-11T23:32:40.537Z
2019-05-11T23:32:40.537Z
uhoh
<p>The shape of the orbit would be an <a href="https://en.wikipedia.org/wiki/Epicycloid" rel="nofollow noreferrer">epicycloid</a>.
<a href="https://i.sstatic.net/7QTwG.png" rel="nofollow noreferrer"><img src="https://i.sstatic.net/7QTwG.png" alt="Wikimedia commons"></a></p>

<p>See <a href="https://en.wikipedia.org/wiki/Deferent_and_epicycle" rel="nofollow noreferrer">https://en.wikipedia.org/wiki/Deferent_and_epicycle</a> for more information on the geocentric orbital view.</p>

CC BY-SA 4.0
2019-03-30T21:35:29.327Z
2019-03-30T21:35:29.327Z
Ingolifs
<p>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) ?</p>

<p>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 ? </p>

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

CC BY-SA 4.0
2019-03-30T10:20:39.263Z
I comment only, as for it is basically a link. https://celestia.space this free package should let you hover a fixed Earth and look at the Sun and planetary motion with respect of.
Alchimista
CC BY-SA 4.0
2019-03-30T22:23:49.290Z
http://orbitsimulator.com/gsim.html
James K
<orbit>
'Geocentric' view of orbits
molok
# 'Geocentric' view of orbits

(Asked by: username_0 on 2019-03-30)

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 .

**Tags:** orbit

> **Comments:**
> **username_1**: I comment only, as for it is basically a link. https://celestia.space this free package should let you hover a fixed Earth and look at the Sun and planetary motion with respect of.  
> **username_2**: http://orbitsimulator.com/gsim.html  

---

## 2 answers

### Answer by username_3 on 2019-03-31. Score: 4 | Accepted answer

@username_4' 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.

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)
    bodies.append(body)
    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:
    plt.figure()
    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)

    plt.show()


---

### Answer by username_4 on 2019-03-30. Score: 3

The shape of the orbit would be an [epicycloid](https://en.wikipedia.org/wiki/Epicycloid).
[![Wikimedia commons](https://i.sstatic.net/7QTwG.png)](https://i.sstatic.net/7QTwG.png)

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


---

