Hello! Please take a look at my code below from the project on visualizing the Orion constellation. For style, I tried to make the background black for the plots, but I ran into some trouble on finding ways how to do it (thanks, StackOverflow). Please let me know if you have any suggestions on ways to improve my efficiency or syntax (also, I was only able to upload 1 picture since I am a new user of the forum).
The goal of the project is to understand spatial perspective using the
.scatter() function of matplotlib . Once you visualize Orion in both 2D and 3D, you will be able to see the difference in the constellation shape humans see from earth versus the actual position of the stars that make up this constellation.
The following set-up is new and specific to the project. It is very similar to the way you have imported Matplotlib in previous lessons.
%matplotlib notebookin the cell below. This is a new statement that you may not have seen before. It will allow you to be able to rotate your visualization in this jupyter notebook.
We will be using a subset of Matplotlib:
matplotlib.pyplot. Import the subset as you have been importing it in previous lessons:
from matplotlib import pyplot as plt
In order to see our 3D visualization, we also need to add this new line after we import Matplotlib:
from mpl_toolkits.mplot3d import Axes3D
%matplotlib notebook from matplotlib import pyplot as plt from mpl_toolkits.mplot3d import Axes3D
Astronomers describe a star’s position in the sky by using a pair of angles: declination and right ascension. Declination is similar to longitude, but it is projected on the celestian fear. Right ascension is known as the “hour angle” because it accounts for time of day and earth’s rotaiton. Both angles are relative to the celestial equator. You can learn more about star position here.
y , and
z lists below are composed of the x, y, z coordinates for each star in the collection of stars that make up the Orion constellation as documented in a paper by Nottingham Trent Univesity on “The Orion constellation as an installation” found here.
Spend some time looking at
y , and
z , does each fall within a range?
# 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]
Before we visualize the stars in 3D, let’s get a sense of what they look like in 2D.
Create a figure for the 2d plot and save it to a variable name
Add your subplot
.add_subplot() as the single subplot, with
Use the scatter function to visualize your
Render your visualization.
In order to imitate the look of the night sky, the
Does the 2D visualization look like the Orion constellation we see in the night sky? Do you recognize its shape in 2D? There is a curve to the sky, and this is a flat visualization, but we will visualize it in 3D in the next step to get a better sense of the actual star positions.
fig = plt.figure() ax = fig.add_subplot(1, 1, 1) plt.scatter(x, y, marker = 'd', color = 'yellow') plt.title('Orion Constellation in 2D') plt.xlabel('X coordinate') plt.ylabel('Y coordinate') ax.set_facecolor('black') plt.show()
Create a figure for the 3D plot and save it to a variable name
Since this will be a 3D projection, we want to make to tell Matplotlib this will be a 3D plot.
To add a 3D projection, you must include a the projection argument. It would look like this:
Add your subplot with
.add_subplot() as the single subplot
1,1,1 and specify your
Since this visualization will be in 3D, we will need our third dimension. In this case, our
Create a new variable
constellation3d and call the scatter function with your
z just as you have been including the other two axes. (hint:
Render your visualization. (hint
fig_3d = plt.figure() constellation3d = fig_3d.add_subplot(1, 1, 1, projection = '3d') constellation3d.scatter(x, y, z, marker = 'd', color = 'yellow', s = 40) plt.title('Orion Constellation in 3D') plt.xlabel('X coordinate') plt.ylabel('Y coordinate') constellation3d.set_zlabel('Z coordinate') constellation3d.w_xaxis.set_pane_color((0, 0, 0, 1.0)) constellation3d.w_yaxis.set_pane_color((0, 0, 0, 1.0)) constellation3d.w_zaxis.set_pane_color((0, 0, 0, 1.0)) plt.show()