|
19 | 19 | asfileobj=False)
|
20 | 20 | gender_degree_data=np.genfromtxt(fname,delimiter=',',names=True)
|
21 | 21 |
|
22 |
| -# These are the colors that will be used in the plot |
23 |
| -color_sequence= ['#1f77b4','#aec7e8','#ff7f0e','#ffbb78','#2ca02c', |
24 |
| -'#98df8a','#d62728','#ff9896','#9467bd','#c5b0d5', |
25 |
| -'#8c564b','#c49c94','#e377c2','#f7b6d2','#7f7f7f', |
26 |
| -'#c7c7c7','#bcbd22','#dbdb8d','#17becf','#9edae5'] |
27 |
| - |
28 | 22 | # You typically want your plot to be ~1.33x wider than tall. This plot
|
29 | 23 | # is a rare exception because of the number of lines being plotted on it.
|
30 | 24 | # Common sizes: (10, 7.5) and (12, 9)
|
31 | 25 | fig,ax=plt.subplots(1,1,figsize=(12,14))
|
32 | 26 |
|
| 27 | +# These are the colors that will be used in the plot |
| 28 | +ax.set_prop_cycle(color=[ |
| 29 | +'#1f77b4','#aec7e8','#ff7f0e','#ffbb78','#2ca02c','#98df8a', |
| 30 | +'#d62728','#ff9896','#9467bd','#c5b0d5','#8c564b','#c49c94', |
| 31 | +'#e377c2','#f7b6d2','#7f7f7f','#c7c7c7','#bcbd22','#dbdb8d', |
| 32 | +'#17becf','#9edae5']) |
| 33 | + |
33 | 34 | # Remove the plot frame lines. They are unnecessary here.
|
34 | 35 | ax.spines['top'].set_visible(False)
|
35 | 36 | ax.spines['bottom'].set_visible(False)
|
|
47 | 48 | ax.set_xlim(1969.5,2011.1)
|
48 | 49 | ax.set_ylim(-0.25,90)
|
49 | 50 |
|
50 |
| -# Make sure your axis ticks are large enough to be easily read. |
51 |
| -# You don't want your viewers squinting to read your plot. |
52 |
| -plt.xticks(range(1970,2011,10),fontsize=14) |
53 |
| -plt.yticks(range(0,91,10),fontsize=14) |
| 51 | +# Set a fixed location and format for ticks. |
| 52 | +ax.set_xticks(range(1970,2011,10)) |
| 53 | +ax.set_yticks(range(0,91,10)) |
54 | 54 | ax.xaxis.set_major_formatter(plt.FuncFormatter('{:.0f}'.format))
|
55 | 55 | ax.yaxis.set_major_formatter(plt.FuncFormatter('{:.0f}%'.format))
|
56 | 56 |
|
57 | 57 | # Provide tick lines across the plot to help your viewers trace along
|
58 | 58 | # the axis ticks. Make sure that the lines are light and small so they
|
59 | 59 | # don't obscure the primary data lines.
|
60 |
| -plt.grid(True,'major','y',ls='--',lw=.5,c='k',alpha=.3) |
| 60 | +ax.grid(True,'major','y',ls='--',lw=.5,c='k',alpha=.3) |
61 | 61 |
|
62 | 62 | # Remove the tick marks; they are unnecessary with the tick lines we just
|
63 |
| -# plotted. |
64 |
| -plt.tick_params(axis='both',which='both',bottom=False,top=False, |
65 |
| -labelbottom=True,left=False,right=False,labelleft=True) |
| 63 | +# plotted. Make sure your axis ticks are large enough to be easily read. |
| 64 | +# You don't want your viewers squinting to read your plot. |
| 65 | +ax.tick_params(axis='both',which='both',labelsize=14, |
| 66 | +bottom=False,top=False,labelbottom=True, |
| 67 | +left=False,right=False,labelleft=True) |
66 | 68 |
|
67 | 69 | # Now that the plot is prepared, it's time to actually plot the data!
|
68 | 70 | # Note that I plotted the majors in order of the highest % in the final year.
|
|
80 | 82 | 'Math and Statistics':0.75,'Architecture':-0.75,
|
81 | 83 | 'Computer Science':0.75,'Engineering':-0.25}
|
82 | 84 |
|
83 |
| -forrank,columninenumerate(majors): |
| 85 | +forcolumninmajors: |
84 | 86 | # Plot each line separately with its own color.
|
85 | 87 | column_rec_name=column.replace('\n','_').replace(' ','_')
|
86 | 88 |
|
87 |
| -line=plt.plot(gender_degree_data['Year'], |
88 |
| -gender_degree_data[column_rec_name], |
89 |
| -lw=2.5, |
90 |
| -color=color_sequence[rank]) |
| 89 | +line,=ax.plot('Year',column_rec_name,data=gender_degree_data, |
| 90 | +lw=2.5) |
91 | 91 |
|
92 | 92 | # Add a text label to the right end of every line. Most of the code below
|
93 | 93 | # is adding specific offsets y position because some labels overlapped.
|
|
98 | 98 |
|
99 | 99 | # Again, make sure that all labels are large enough to be easily read
|
100 | 100 | # by the viewer.
|
101 |
| -plt.text(2011.5,y_pos,column,fontsize=14,color=color_sequence[rank]) |
| 101 | +ax.text(2011.5,y_pos,column,fontsize=14,color=line.get_color()) |
102 | 102 |
|
103 | 103 | # Make the title big enough so it spans the entire plot, but don't make it
|
104 | 104 | # so big that it requires two lines to show.
|
|
111 | 111 | # Finally, save the figure as a PNG.
|
112 | 112 | # You can also save it as a PDF, JPEG, etc.
|
113 | 113 | # Just change the file extension in this call.
|
114 |
| -#plt.savefig('percent-bachelors-degrees-women-usa.png', bbox_inches='tight') |
| 114 | +#fig.savefig('percent-bachelors-degrees-women-usa.png', bbox_inches='tight') |
115 | 115 | plt.show()
|