matplotlib实现随机漫步
本人小白,自学Python,本部分内容是自学《Python编程 从入门到实践》的随手笔记。案例及代码均为教材中的案例。
在自然界中,物理学、生物学、化学和经济领域,随机漫步都有其实际用途。例如,漂浮在水面上的花粉因不断受到水分子的作用而在水面上随机移动,水滴中的分子运动是随机的,因此花粉在水面上的运动犹如随机漫步,本例就是将随机漫步的结果以图表的形式呈献出来。
思路:将随机漫步的坐标存入在两个坐标中,再用scatter()绘制出来。
一、创建一个类,指定程序所需的变量及相互关系
class RandomWalk():
'''生成一个随机漫步数据的类'''
def __init__(self,num_points=5000):
'''初始化随机漫步的属性'''
self.num_points = num_points
# 所有随机漫步都始于(0,0)
self.x_values = [0]
self.y_values = [0]
二、设置参数变量
def fill_walk(self):
'''计算随机漫步包含的所有点'''
# 不断漫步,直到列表达到指定的长度
while len(self.x_values) < self.num_points:
# 决定前进方向以及沿这个方向前进的距离
x_direction = choice([1,-1])
x_distance = choice([0,1,2,3,4])
x_step = x_direction * x_distance
y_direction = choice([1,-1])
y_distance = choice([0, 1, 2, 3, 4])
y_step = y_direction * y_distance
# 拒绝原地踏步
if x_step == 0 and y_step == 0:
continue
# 计算下一个点x值和y值
next_x = self.x_values[-1] + x_step
next_y = self.y_values[-1] + y_step
self.x_values.append(next_x)
self.y_values.append(next_y)
此时引了choice()
方法来决定漫步的方向和距离,需在开头进行声明。
三、创建实例,并运行随机漫步。
由于本工程引用了两个库,需在开头处进行声明:
import matplotlib.pyplot as plt
from ramdom import choice
.........
example = RandomWalk()
example.fill_walk()
plt.figure(figsize=(12,8)) # 由于数值较多,设置画布大小,便于观察规律。
plt.scatter(example.x_values,example.y_values,s=10)
plt.show()
效果如下图:
随机漫步5000个点
四、设置样式,美化图表
(一)利用cmap给点着色
利用cmap给点着色可以突出各个点的先后顺序,甚至可以看出随机漫步方向及经过,使简单的图表清晰地、可视化地表达部分信息。
使用cmap参数,数值越小,颜色越浅,数值越大,颜色越深。
- 增设一个变量,用以统计点的个数,并用于后面的cmap使用。由于是逐个添加的,所以数值越大,越是最后绘制的点。
point_numbers = list(range(rw.num_points))
。 - 在scatter()中增加cmap设置,即增加
c=point_numbers,cmap=plt.cm.Blues
。使用matplotlib中内置的Blues系列颜色。 - 最后的scatter()是这样的:
plt.scatter(rw.x_values,rw.y_values,s=5,c=point_numbers,cmap=plt.cm.Blues)
。 -
绘制结果如下图:
颜色映射后的随机漫步图
可以看出基本的趋势如下图:
基本走势示意图
plt.figure(figsize=(12,8))
plt.scatter(rw.x_values,rw.y_values,s=5,c=point_numbers,cmap=plt.cm.Blues)
网友评论