<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](https://astronomy.stackexchange.com/a/30179/7982) is exactly right. I'll just add to it some more plotting using the Python package [Skyfield](https://rhodesmill.org/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](https://i.sstatic.net/0bT3U.png)](https://i.sstatic.net/0bT3U.png)

```
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.


---

