def show_stars(dt, range, count_show_with_legend, plot_name, scatter=False): ax = plt.subplot(111, projection='3d') ax.plot((0,), (0,), (0,), 'o', color='orange', markersize=10, label='sun') ax.plot([0, range], [0, 0], [0, 0], label='to galaxy center') arc = Arc((27200, 0, 0), SUN_TO_CENTER_DISTANCE * 2, SUN_TO_CENTER_DISTANCE * 2, theta1=180 - np.degrees(range / SUN_TO_CENTER_DISTANCE), theta2=180 + np.degrees(range / SUN_TO_CENTER_DISTANCE)) ax.add_patch(arc) art3d.pathpatch_2d_to_3d(arc, z=0) ax.plot([0, polaris["x"][0]], [0, polaris["y"][0]], [0, polaris["z"][0]], label='polaris') if scatter: ax.scatter(dt['x'], dt['y'], dt['z'], c=dt['vmag'], cmap=plt.cm.Spectral) else: counter = 0 for r in dt: marker = mlines.Line2D.filled_markers[counter % mlines.Line2D.filled_markers.__len__()] if counter < count_show_with_legend: ax.plot([r["x"]], [r["y"]], [r["z"]], 'o', label=r["name"] + " " + str(r["vmag"]) + " " + str(int(r["dist"])) + "ly", markersize=5, marker=marker) else: ax.plot([r["x"]], [r["y"]], [r["z"]], '.', markersize=2) counter += 1 try: ax.legend(numpoints=1, fontsize=10) # call with fontsize fails on debian 7 except: ax.legend(numpoints=1) ax.set_xlabel('ly') ax.set_ylabel('ly') ax.set_zlabel('ly') ax.auto_scale_xyz([-range, range], [-range, range], [-range, range]) show_maximized_plot(plot_name)
def show_globular_clusters(dt, messier): ax = plt.subplot(111, projection='3d') ax.plot((0,), (0,), (0,), 'o', color='orange', markersize=7, label='sun') circle = Circle((SUN_TO_CENTER_DISTANCE, 0, 0), SUN_TO_CENTER_DISTANCE, fill=False, color='blue') ax.add_patch(circle) art3d.pathpatch_2d_to_3d(circle, z=0) circle = Circle((SUN_TO_CENTER_DISTANCE, 0, 0), MILKY_WAY_RADIUS, fill=False, color='blue') ax.add_patch(circle) art3d.pathpatch_2d_to_3d(circle, z=0) circle = Circle((0, 0, 0), 1000, fill=False, color='red') ax.add_patch(circle) art3d.pathpatch_2d_to_3d(circle, z=0) if messier: counter = 0 for r in dt: marker = mlines.Line2D.filled_markers[counter % mlines.Line2D.filled_markers.__len__()] if r["messier"] > 0: ax.plot([r["x"]], [r["y"]], [r["z"]], 'o', label="M" + str(r["messier"]) + " " + str(int(r["dist"])), markersize=5, marker=marker) counter += 1 try: ax.legend(numpoints=1, fontsize=10) # call with fontsize fails on debian 7 except: ax.legend(numpoints=1) else: ax.scatter(dt['x'], dt['y'], dt['z']) ax.set_xlabel('ly') ax.set_ylabel('ly') ax.set_zlabel('ly') ax.auto_scale_xyz([-35000, 85000], [-60000, 60000], [-60000, 60000]) show_maximized_plot('globular clusters')
def show_local_group(dt): dt = dt[dt['dist'] < 1.0] ax = plt.subplot(111, projection='3d') ax.plot((0,), (0,), (0,), 'o', color='cyan', markersize=15, label='milky way') ax.set_color_cycle(['r', 'g', 'b', 'y', 'c', 'm']) counter = 0 for r in dt: if r['name'] == 'NGC0224': marker_size = 20 galaxy_name = 'Andromeda glx' marker = 'o' elif r['name'] == 'NGC0598': marker_size = 10 galaxy_name = 'Triangulum glx' marker = 'o' else: marker_size = 5 galaxy_name = r['name'] marker = mlines.Line2D.filled_markers[counter % mlines.Line2D.filled_markers.__len__()] ax.plot([r['x']], [r['y']], [r['z']], '.', label=galaxy_name + ' (' + '{0:,.0f}'.format(r['dist_ly']) + 'ly)', markersize=marker_size, marker=marker) counter += 1 ax.legend(numpoints=1) ax.set_xlabel('Mpc') ax.set_ylabel('Mpc') ax.set_zlabel('Mpc') ax.view_init(elev=10, azim=-25) show_maximized_plot('local group')
def show_globular_clusters(dt, messier): ax = plt.subplot(111, projection='3d') ax.plot((0,), (0,), (0,), 'o', color='orange', markersize=7, label='sun') circle = Circle((SUN_TO_CENTER_DISTANCE, 0, 0), SUN_TO_CENTER_DISTANCE, fill=False, color='blue') ax.add_patch(circle) art3d.pathpatch_2d_to_3d(circle, z=0) circle = Circle((SUN_TO_CENTER_DISTANCE, 0, 0), MILKY_WAY_RADIUS, fill=False, color='blue') ax.add_patch(circle) art3d.pathpatch_2d_to_3d(circle, z=0) circle = Circle((0, 0, 0), 1000, fill=False, color='red') ax.add_patch(circle) art3d.pathpatch_2d_to_3d(circle, z=0) if messier: counter = 0 for r in dt: marker = mlines.Line2D.filled_markers[counter % mlines.Line2D.filled_markers.__len__()] if str(r["Name"]).startswith('M'): ax.plot([r["X"]], [r["Y"]], [r["Z"]], 'o', label=str(r["Name"]) + " " + str(r["Rsun"]), markersize=5, marker=marker) counter += 1 ax.legend(numpoints=1, fontsize=10) else: ax.scatter(dt['X'], dt['Y'], dt['Z']) ax.set_xlabel('ly') ax.set_ylabel('ly') ax.set_zlabel('ly') ax.auto_scale_xyz([-35000, 85000], [-60000, 60000], [-60000, 60000]) show_maximized_plot('globular clusters')
def show_open_clusters(messier,data,box_size): ax = plt.subplot(111, projection='3d') ax.plot([0], [0], [0], 'o', color='orange', markersize=10, label='sun') circle = Circle((SUN_TO_CENTER_DISTANCE, 0, 0), SUN_TO_CENTER_DISTANCE, fill=False, color='blue') ax.add_patch(circle) art3d.pathpatch_2d_to_3d(circle, z=0) circle = Circle((SUN_TO_CENTER_DISTANCE, 0, 0), MILKY_WAY_RADIUS, fill=False, color='blue') ax.add_patch(circle) art3d.pathpatch_2d_to_3d(circle, z=0) if messier: counter = 0 for r in data: marker = mlines.Line2D.filled_markers[counter % mlines.Line2D.filled_markers.__len__()] ax.plot([r["x"]], [r["y"]], [r["z"]], 'o', label=r["messier"] + " " + str(int(r["dist"])) + " ly", markersize=5, marker=marker) counter += 1 try: ax.legend(numpoints=1, fontsize=10) # call with fontsize fails on debian 7 except: ax.legend(numpoints=1) else: ax.scatter(data["x"], data["y"], data["z"]) ax.set_xlabel('ly') ax.set_ylabel('ly') ax.set_zlabel('ly') ax.auto_scale_xyz([-box_size, box_size], [-box_size, box_size], [-box_size, box_size]) show_maximized_plot('open clusters')
def show_galaxies(dt, view_mode): if view_mode == 0: box_size = 10.0 dt = dt[dt['dist'] < box_size] elif view_mode == 1: box_size = 30.0 dt = dt[dt['dist'] < box_size] elif view_mode == 2: box_size = 70.0 dt = dt[dt['dist'] < box_size] dt = dt[dt['dist'] > 30.0] elif view_mode == 3: box_size = 120.0 dt = dt[dt['dist'] < box_size] dt = dt[dt['dist'] > 40.0] ax = plt.subplot(111, projection='3d') ax.scatter(0, 0, 0, color='red') ax.scatter(dt['x'], dt['y'], dt['z'], c=dt['vel'], cmap=plt.cm.jet) ax.set_color_cycle(['r', 'g', 'm', 'c', 'y', 'b']) for r in dt: if view_mode == 0: if str(r['name']) == 'NGC3031': ax.plot([0, r['x']], [0, r['y']], [0, r['z']], label='M81 group') elif str(r['name']) == 'NGC5236': ax.plot([0, r['x']], [0, r['y']], [0, r['z']], label='M83 group') elif str(r['name']) == 'NGC5128': ax.plot([0, r['x']], [0, r['y']], [0, r['z']], label='Centaurus A group') elif str(r['name']) == 'NGC5457': ax.plot([0, r['x']], [0, r['y']], [0, r['z']], label='M101 group') elif str(r['name']) == 'UGC05882': ax.plot([0, r['x']], [0, r['y']], [0, r['z']], label='M96 group') elif str(r['name']) == 'IC0342': ax.plot([0, r['x']], [0, r['y']], [0, r['z']], label='IC342 group') elif str(r['name']) == 'NGC0224': ax.plot([0, r['x']], [0, r['y']], [0, r['z']], label='Andromeda galaxy') elif view_mode == 1: if str(r['name']) == 'NGC4477': ax.plot([0, r['x']], [0, r['y']], [0, r['z']], label='virgo cluster') elif str(r['name']) == 'NGC1365': ax.plot([0, r['x']], [0, r['y']], [0, r['z']], label='fornax cluster') elif view_mode == 2 or view_mode == 3: if str(r['name']) == 'NGC4696B': ax.plot([0, r['x']], [0, r['y']], [0, r['z']], label='centaurus cluster') elif str(r['name']) == 'NGC3309': ax.plot([0, r['x']], [0, r['y']], [0, r['z']], label='hydra cluster') elif str(r['name']) == 'NGC4874': ax.plot([0, r['x']], [0, r['y']], [0, r['z']], label='coma cluster') ax.legend() if view_mode == 0: ax.view_init(elev=10, azim=40) elif view_mode == 1: ax.view_init(elev=5, azim=-150) elif view_mode == 2 or view_mode == 3: ax.view_init(elev=0, azim=-70) ax.set_xlabel('Mpc') ax.set_ylabel('Mpc') ax.set_zlabel('Mpc') ax.auto_scale_xyz([-box_size, box_size], [-box_size, box_size], [-box_size, box_size]) show_maximized_plot('galaxies ' + str(int(box_size)) + ' Mpc')
ax.auto_scale_xyz([-range, range], [-range, range], [-range, range]) show_maximized_plot(plot_name) #================================================================================================ dt_stars = data[0:1000] show_stars(dt_stars, 1000, 0, "1000 brightest stars", True) dt_stars = data[0:30] show_stars(dt_stars, 1000, 30, "30 brightest stars") dt_ursa = data[data["con"] == "UMa"] show_stars(dt_ursa, 200, 6, "ursa major") dt_orion = data[data["con"] == "Ori"] show_stars(dt_orion, 600, 7, "orion") dt_filtered = data[data['dist'] < 6000] plt.hist(dt_filtered['dist'], bins=100) plt.xlabel('distance light years') plt.ylabel('number of stars') show_maximized_plot("star histogram")
ax.plot([0, 5000], [0, 0], [0, 0], label='to galaxy center') arc = Arc((SUN_TO_CENTER_DISTANCE, 0, 0), 2 * SUN_TO_CENTER_DISTANCE, 2 * SUN_TO_CENTER_DISTANCE, theta1=170, theta2=190) ax.add_patch(arc) art3d.pathpatch_2d_to_3d(arc, z=0) for r in dt: if r['type'] == 'Pl': marker = 'o' planetary_suffix = ' (pl)' else: marker = '^' planetary_suffix = '' ax.plot([r["x"]], [r["y"]], [r["z"]], 'o', label=r["messier"] + " " + str(int(r["dist"])) + planetary_suffix, markersize=6, marker=marker) ax.legend(numpoints=1) ax.set_xlabel('ly') ax.set_ylabel('ly') ax.set_zlabel('ly') ax.auto_scale_xyz([-7000, 7000], [-7000, 7000], [-7000, 7000]) show_maximized_plot('nebulas')