随机漫步是一个个随机的点行走得到的路径:每次行走都完全是随机的,没有明确的方向,结果是由一系列随机决策决定的路径
创建类 RandomWalk()# radom_walk.py # 代码所有:cxw # 开发时间:2021/11/22 10:10 from random import choice class RandonWalk(): # 一个用于生成随机漫步数据的类 def __init__(self, num=5000): self.num = num # 存储随机漫步次数的变量 # 所有随机漫步都初始为0 self.x_value = [0] # 每个点的x坐标 self.y_value = [0] '''将所有可能的选择存储在一个列表中,并在每次做决定时使用choice()来决定使用哪种选择''' # 计算漫步包含的所有点,向左 右 还是上 下 走 def fill_walk(self): # 决定前进方向以及沿着这个方向前进的距离 while len(self.x_value) < self.num: x_direction = choice([1, -1]) # x值要么选择向右走的1,要么选择向左走的-1 x_distance = choice([0, 1, 2, 3, 4]) # 然后选择0~4中的整数,沿这个方向走多远 x_step = x_direction * x_distance '''如果x_step为正,向右移动,反之向左移动,为0垂直移动''' y_direction = choice([1, -1]) y_distance = choice([0, 1, 2, 3, 4]) y_step = y_direction * y_distance '''如果y_step为正,上,反之下''' # 如果x==0或者y==0就说明原地不动,跳出循环 if x_step == 0 and y_step == 0: continue # 计算下一个点的x值和y值,获取漫步中下一个点的x和y值,将x_step中最后一个数和x_value中最后一个数相加 next_x = self.x_value[-1] + x_step next_y = self.y_value[-1] + y_step # 添加到x值 self.x_value.append(next_x) self.y_value.append(next_y)绘制随机漫步图 scatter()绘制一系列点
# Random_walk.py # 代码所有:cxw # 开发时间:2021/11/22 12:49 from radom_walk import RandonWalk from matplotlib import pyplot as plt '''实例创建''' # 创建实例 s = RandonWalk() s.fill_walk() # 调用方法,随机漫步 plt.scatter(s.x_value, s.y_value, s=15, c='red') plt.title('Random walk', fontsize=24) plt.xlabel('random_x', fontsize=14) plt.ylabel("random_y", fontsize=14) plt.tick_params(axis="both", which="major", labelsize=14) plt.show()模拟多次随机漫步
使用手动输入是否停止漫步,y/n
# 代码所有:cxw # 开发时间:2021/11/22 12:49 from radom_walk import RandonWalk from matplotlib import pyplot as plt '''动态漫步,多次随机''' while True: s = RandonWalk() s.fill_walk() # 调用方法,随机漫步 plt.scatter(s.x_value, s.y_value, s=15, c=s.y_value, cmap=plt.cm.Blues, edgecolors="none") '''c指定为y_value,沿着y轴向上的点越来越深,cmap指定颜色为蓝色,edgecolors指定轮廓颜色为无''' plt.title('Random walk', fontsize=24) plt.xlabel('random_x', fontsize=14) plt.ylabel("random_y", fontsize=14) plt.tick_params(axis="both", which="major", labelsize=14) plt.show() jump_random_walk = input("请输入y继续漫步,n结束漫步") if jump_random_walk == 'n': break采用颜色映射反映点的随机性
使用颜色映射来指定随机漫步中的随机性,传递参数c,指定为y_value,这样沿着y轴向上的点越来越深.cmap指定颜色为蓝色,edgecolors指定轮廓颜色为无
plt.scatter(s.x_value, s.y_value, s=15, c=s.y_value, cmap=plt.cm.Blues, edgecolors="none") '''c指定为y_value,沿着y轴向上的点越来越深,cmap指定颜色为蓝色,edgecolors指定轮廓颜色为无'''
分割
或者将c传递为一个包含随机漫步次数num的列表,按照点的先后产生顺序来实现颜色映射,表示随机性
list_num = [range(self.num)] plt.scatter(s.x_value, s.y_value, s=15, c=list_num, cmap=plt.cm.Blues, edgecolors="none")重新绘制起终点 突出位置
起点绘制成绿色,重点绘制成红色
# 重新绘制起点和终点 plt.scatter(0, 0, s=100, c='green', edgecolors="none") plt.scatter(s.x_value[-1], s.y_value[-1], c="red", edgecolors="none", s=100) # s.x_value[-1]表示x的最后一个点,y_value同理
生成图片如下:
使用plt.axis(‘off’)或plt.xticks([])
plt.yticks([])隐藏坐标轴,使随机漫步更清晰明确
'''隐藏坐标轴''' '''两种方法 plt.axis('off') 或 plt.xticks([]) plt.yticks([])''' # plt.axis('off') plt.xticks([]) plt.yticks([])指定matplotlib绘图的窗口
figure()函数指定matplotlib绘制图表的大小,figsize传递一个元组,指定宽度和高度 dpi指定分辨率
# 设置绘图窗口的尺寸 plt.figure(figsize=(10, 6), dpi=108) # figure()用于指定图表的宽度、高度、分辨率和背景色,指定一个元组,指出绘制的尺寸,英寸,dpi指定分辨率通过随机漫步模仿布朗运动
将其中的plt.scatter()替换为plt.plot()。为模拟花粉在水滴表面的运动路径,向plt.plot()传递rw.x_values和rw.y_values,并指定实参值linewidth。使用5000个点而不是50000个点。
# 代码所有:cxw # 开发时间:2021/11/23 22:00 from radom_walk import RandonWalk from matplotlib import pyplot as plt bl = RandonWalk() bl.fill_walk() plt.plot(bl.x_value, bl.y_value, linewidth=14) '''设置坐标轴的标注''' plt.title('BuLangyundong', fontsize=24) plt.xlabel('random_x', fontsize=14) plt.ylabel("random_y", fontsize=14) plt.tick_params(axis="both", which="major", labelsize=14) plt.show()
生成图片如下:
python数据化学习之随机漫步
1、创建类 RandomWalk()
2、 绘制随机漫步图 scatter()绘制一系列点
3、 模拟多次随机漫步
4、 采用颜色映射反映点的随机性
5、 重新绘制起终点 突出位置
6、隐藏坐标轴
7、通过随机漫步模仿布朗运动
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)