第15章:生成数据
绘制简单的折线图
1 import matplotlib.pyplot as plt 2 3 input_values = [1,2,3,4,5] 4 squares = [1,4,9,16,25] 5 plt.style.use('seaborn') #使用内置样式 plt.style.available 6 fig,ax = plt.subplots() #调用函数subplots()在一张图片中绘制一个或多个图表 7 ax.plot(input_values,squares,linewidth=3) #参数Linewidth决定了plot()绘制的线条粗细 8 9 ax.set_title('平方数',fontsize=24) #方法set_title()给图表指定标题 10 ax.set_xlabel('值',fontsize=14) 11 ax.set_ylabel('值的平方',fontsize=14) 12 ax.tick_params(axis='both',labelsize=14) #方法tick_params()设置刻度的样式 13 14 plt.show()
绘制散点图并设置样式
1 import matplotlib.pyplot as plt 2 3 x_values = range(1,1001) 4 y_values = [x**2 for x in x_values] 5 6 plt.style.use('seaborn') 7 fig,ax = plt.subplots() 8 #ax.scatter(x_values,y_values,c='red',s=10) 9 ax.scatter(x_values,y_values,c=y_values,cmap=plt.cm.Blues,s=10) 10 11 ax.set_title('平方数',fontsize=24) 12 ax.set_xlabel('值',fontsize=14) 13 ax.set_ylabel('值的平方',fontsize=14) 14 ax.tick_params(axis='both',which='major',labelsize=14) 15 16 plt.show() 17 #plt.savefig('squares.png',bbox_inches='tight')
随机漫步
1 from random import choice 2 3 class RandomWalk: 4 5 def __init__(self,num_points=5000): 6 self.num_points = num_points 7 self.x_values = [0] 8 self.y_values = [0] 9 10 def fill_walk(self): 11 while len(self.x_values) < self.num_points: 12 13 x_direction =choice([1,-1]) 14 x_distance = choice([0,1,2,3,4]) 15 x_step = x_direction * x_distance 16 17 y_direction = choice([-1,1]) 18 y_distance = choice([0,1,2,3,4]) 19 y_step = y_direction * y_distance 20 21 if x_step==0 and y_step==0: 22 continue 23 24 x = self.x_values[-1]+x_step 25 y = self.y_values[-1]+y_step 26 27 self.x_values.append(x) 28 self.y_values.append(y)
1 import matplotlib.pyplot as plt 2 3 from random_walk import RandomWalk 4 5 rw =RandomWalk(50000) 6 rw.fill_walk() 7 plt.style.use('classic') 8 fig,ax=plt.subplots(figsize=(15,9)) 9 point_numbers=range(rw.num_points) 10 ax.scatter(rw.x_values,rw.y_values,c=point_numbers,cmap=plt.cm.Blues,edgecolors='none',s=15) 11 ax.scatter(0,0,c='green',edgecolors='none',s=100) 12 ax.scatter(rw.x_values[-1],rw.y_values[-1],c='red',edgecolors='none',s=100) 13 14 ax.get_xaxis().set_visible(False) 15 ax.get_yaxis().set_visible(False) 16 17 plt.show()
使用plotly模拟掷骰子
1 from random import randint 2 3 class Die: 4 5 def __init__(self,num_sides=6): 6 self.num_sides = num_sides 7 8 def roll(self): 9 return randint(1,self.num_sides)
1 from plotly.graph_objs import Bar,Layout 2 from plotly import offline 3 from die import Die 4 5 die_1=Die() 6 die_2=Die(10) 7 8 results = [] 9 for roll_num in range(50_000): 10 result = die_1.roll()+die_2.roll() 11 results.append(result) 12 13 frequencies = [] 14 max_result = die_1.num_sides + die_2.num_sides 15 for value in range(2,max_result+1): 16 frequency = results.count(value) 17 frequencies.append(frequency) 18 19 x_values = list(range(2,max_result+1)) 20 data = [Bar(x=x_values,y=frequencies)] 21 22 x_axis_config = {'title':'结果','dtick':1} 23 y_axis_config = {'title':'结果的频率'} 24 my_layout = Layout(title='掷1个D6和D10 50000次的结果',xaxis=x_axis_config,yaxis=y_axis_config) 25 offline.plot({'data':data,'layout':my_layout},filename='d6_d10.html')