# 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()
plt.scatter(x,y, color=‘red’, marker=’*’)
plt.xlabel(‘X-axis’)
plt.ylabel(‘Y-axis’)

plt.savefig(‘orion2d’)

plt.show()

# 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()
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.’)

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