第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')