Constellations Project

Hey everyone, I finished my Orion Constellation project. Here it is along with some questions:

importing libraries

%matplotlib notebook
from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

Orion

x = [-0.41, 0.57, 0.07, 0.00, -0.29, -0.32,-0.50,-0.23, -0.23]
y = [4.12, 7.71, 2.36, 9.10, 13.35, 8.13, 7.19, 13.25,13.43]
z = [2.06, 0.84, 1.56, 2.07, 2.36, 1.72, 0.66, 1.25,1.38]

2D plot

fig = plt.figure()
fig.add_subplot(1,1,1)
plt.scatter(x,y, color=‘red’, marker=’*’)
plt.xlabel(‘X-axis’)
plt.ylabel(‘Y-axis’)

plt.savefig(‘orion2d’)

plt.show()

Orion 3D Qs: 1. Everytime I try to add a z axis label my figure dissapears. What am I doing wrong?

Qs: 2. why do we have to create a constellation3d variable? 3. My figure changes sizes depending on what code I add or substract, why could be causing this error? Thanks!

fig_3d = plt.figure()
fig_3d.add_subplot(1,1,1,projection=‘3d’)
constellation3d = plt.scatter(x,y,z)
plt.xlabel(‘X-axis’)
plt.ylabel(‘Y-axis’)
#plt.zlabel(‘Z-axis’)
plt.title(‘Orion Constellation’)

plt.show()

plt.savefig(‘Orion_constellation_Jojo.’)

Orion_constellation_Jojo

I think your two issues are tied together with the fact that the standard matplotlib.pyplot.scatter() function (along with most other wrapper functions) is a 2D scatter function. It treats the third argument (which you have passed as argument z) as the marker size/scale rather than the z-position. If you check closely you’ll probably find all your points on the 3D scatter actually sit on the xy plane at z=0.0.

This is why you need a 3D axis and to hold a reference to it as it enables plotting with the appearance of 3D and has methods and attributes for the same. For a 3D scatter you should be using the .scatter() method (technically there is a .scatter3d method but I’ve not really seen it used, scatter works just fine) of your 3D axis object which supports z data…

ax3dobj = fig.add_subplot(1,1,1,projection="3d")
ax3dobj.scatter(xvals, yvals, zvals...

As for your label there is no standard wrapper function for the z-label and I’d have expected plt.zlabel to throw an error. I think the easiest is using the axis reference you have ax3dobj (or whatever you chose to name it) and the set_zlabel() method since the z-labelling would be unique to certain 3D axes: my_3daxis.set_zlabel('my label').

2 Likes