from IPython.html.widgets import interact, interactive, fixed from IPython.display import display, HTML import requests from mpl_toolkits.mplot3d import Axes3D import datetime import numpy as np planets = ['mars','earth','venus','mercury','sun'] planets = ','.join(planets) now = datetime.datetime.now() year,month,day = now.year, now.month, now.day def get_eph(year,month,day): url = "http://www.astro-phys.com/api/de406/states?date=%s-%s-%s&bodies=%s" % (year,month,day, planets) data = requests.get(url).json() data = data['results'] return data def distances(data): dists = {} for planet in data: dists[planet] = int(np.linalg.norm(np.array(data["earth"]) - np.array(data[planet]), 2)) return dists def system(year, month, day): fig = plt.figure() ax = fig.add_subplot(111, projection='3d') thisdate = str(datetime.date(year, month, day)) ax.set_title(thisdate) data = get_eph(year, month, day) table = '

Distances from Earth on {0}:

\n'.format(thisdate) dists = distances(data) for planet in sorted(data): x,y,z = data[planet][0] ax.scatter(x, y, z) ax.text(x,y,z, planet) if planet != "earth": table += '\n'.format(planet, dists[planet]) display(HTML(table)) w = interactive(system, year=(1980,2020,1), month=(1,12,1), day=(1,30,1)) display(w)
{0}{1} km