Python随机漫步,使用matplotlib方式将这些数据呈现

拼搏现实的明天。 2023-07-23 03:33 94阅读 0赞

我们将使用Python的随机漫步数据,再使用matplotlib方式将这些数据呈现出来!

随机漫步:每次行走都完全是随机的,没有明确的方向结果是由一系列随机决策决定的。

1、创建RandomWalk()类

创建RandomWalk()类,它随机的选择前进的方向。(需要三个属性)

  1. 存储随机漫步次数的变量
  2. 存储随机漫步经过的每个点的x坐标
  3. 存储随机漫步经过的每个点的y坐标

RandomWalk类包含两个方法:

  1. _init_()
  2. fill_walk() 计算随机漫步所经过的所有点

首先新建一个random_walk.py文件

  1. from random import choice
  2. class RandomWalk():
  3. """一个生成随机漫步数据的类"""
  4. def __init__(self,num_points=5000): #默认点数设置为5000
  5. """初始化随机漫步的属性"""
  6. self.num_points=num_points
  7. #所有随机漫步都始于(0,0)
  8. self.x_values=[0] #存储随机漫步经过的每个点的x坐标
  9. self.y_values=[0] #存储随机漫步经过的每个点的y坐标

2、选择方向

使用fill_walk()来生成漫步包含的点,并决定每次漫步的方向,将这个方法添加到random_walk.py文件中

  1. def fill_walk(self):
  2. """计算随机漫步包含的所有的点"""
  3. #不断漫步,直到列表达到指定的的长度
  4. while len(self.x_values) < self.num_points:
  5. """决定前进方向以及沿这个方向前进的距离"""
  6. x_direction=choice([1,-1]) #表示要么向右走1,要么表示向左走1
  7. x_distance=choice([0,1,2,3,4]) #随机选择一个0~4之间的数,告诉Python沿着方向走多远
  8. x_step=x_direction*x_distance #移动方向乘以移动距离
  9. """x_step如果为正,将向右移动;如果为负,将向左移动,为零即垂直移动"""
  10. y_direction = choice([1, -1]) # 表示要么向右走1,要么表示向左走1
  11. y_distance = choice([0, 1, 2, 3, 4]) # 随机选择一个0~4之间的数,告诉Python沿着方向走多远
  12. y_step = y_direction * y_distance # 移动方向乘以移动距离
  13. """y_step如果为正,将向上移动;如果为负,将向下移动,为零即水平移动"""
  14. #拒绝原地踏步(即x_step和y_step都为0)
  15. if x_step==0 and y_step==0:
  16. continue
  17. #计算下一个点的x和y的值
  18. next_x=self.x_values[-1]+x_step #为了漫步下一个点的x的值,将x_step与x_values中的最后一个值相加
  19. next_y=self.y_values[-1]+y_step #为了漫步下一个点的y的值,将y_step与y_values中的最后一个值相加
  20. self.x_values.append(next_x) #获得下一个点的x值后附加的x_values末尾
  21. self.y_values.append(next_y) #获得下一个点的y值后附加的y_values末尾

到这一步,已经完成RandomWalk()中两个方法,下一步我们看下随机漫步的效果

3、绘制随机漫步图

新建一个rw_visual.py文件

  1. import matplotlib.pyplot as plt #导入pyplot模块
  2. from random_walk import RandomWalk #导入RandomWalk类
  3. #创建一个RandomWalk实例,存储在rw中
  4. rw=RandomWalk()
  5. rw.fill_walk() #在调用fill_walk()
  6. plt.scatter(rw.x_values,rw.y_values,s=15)
  7. #讲随机漫步包含的x和y传递给scatter(),选择点的尺寸为15
  8. plt.show()

此处直接在rw_visual文件中运行即可,运行结果如下:
每次运行结果都是随机生成的会不一样!!!

在这里插入图片描述

4、可以模拟多次随机漫步

不需要自己手动不停地运行,这里我们可以将代码放在while循环中,代码如下所示:

在rw_visual.py文件文件中修改

  1. import matplotlib.pyplot as plt #导入pyplot模块
  2. from random_walk import RandomWalk #导入RandomWalk类
  3. while True:
  4. #创建一个RandomWalk实例,存储在rw中
  5. rw=RandomWalk()
  6. rw.fill_walk() #在调用fill_walk()
  7. plt.scatter(rw.x_values,rw.y_values,s=15)
  8. #讲随机漫步包含的x和y传递给scatter(),选择点的尺寸为15
  9. plt.show()
  10. keep_running=input("是否要在模拟一次随机漫步(请输入是或否):")
  11. if keep_running=='否':
  12. break

通过while循环,问我们是否要再模拟一次,是:继续随机漫步,否:终止
效果图如下
在这里插入图片描述
在这里插入图片描述

这时候你会发现随机生成了三张图,运行程序一张,循环两张,然后输入否终止程序!!!

5、可以给随机漫步设置样式

5.1、给点着色

用颜色映射来指出漫步中各点的先后顺序,并删除每个点的黑色轮廓,让颜色更明显。
传递参数c,并将其设置为一个列表,其中包含各点的先后顺序由于这些点是按照顺序绘制的,因此给参数c指定的列表只需包含数字1~5000。

在rw_visual.py文件文件中修改

  1. import matplotlib.pyplot as plt #导入pyplot模块
  2. from random_walk import RandomWalk #导入RandomWalk类
  3. while True:
  4. #创建一个RandomWalk实例,存储在rw中
  5. rw=RandomWalk()
  6. rw.fill_walk() #在调用fill_walk()
  7. point_numbers=list(range(rw.num_points))
  8. plt.scatter(rw.x_values,rw.y_values,c=point_numbers,cmap=plt.cm.Blues,
  9. edgecolors='none',s=15)
  10. #讲随机漫步包含的x和y传递给scatter(),选择点的尺寸为15
  11. plt.show()
  12. keep_running=input("是否要在模拟一次随机漫步(请输入是或否):")
  13. if keep_running=='否':
  14. break

plt.scatter(rw.x_values,rw.y_values,
c=point_numbers,
cmap=plt.cm.Blues,
edgecolors=‘none’,s=15)

c=point_numbers
将参数c设置为point_numbers即催记生成的1~5000个数
cmap=plt.cm.Blues
指定使用映射颜色为蓝色
edgecolors=‘none’
删除每个点周围的轮廓
效果图如下:
在这里插入图片描述

5.2、重新绘制起点和终点

加以改进呈现随机漫步的起点和终点

在rw_visual.py文件文件中添加

  1. #突出起点和终点
  2. plt.scatter(0,0,c='green',edgecolors='none',s=100)
  3. plt.scatter(rw.x_values[-1],rw.y_values[-1],c='red',edgecolors='none',s=100)

效果如下(绿色为起点,红色为终点):
在这里插入图片描述

5.3、隐藏坐标轴

为了突显随机漫步路径,以免注意的是坐标轴,可以对坐标轴进行隐藏

在rw_visual.py文件文件中添加

  1. #隐藏坐标轴
  2. plt.axes().get_xaxis().set_visible(False)
  3. plt.axes().get_yaxis().set_visible(False)

为了修改坐标轴使用了函数plt.axes()将每条坐标轴可见性都设置为False

效果图如下:
在这里插入图片描述

5.4、增加点数

我们在创建RandomWalk实例的时候增大num_points的值,并在绘图是调整每个点的大小

下面附上一份整份的rw_visual.py文件

  1. import matplotlib.pyplot as plt #导入pyplot模块
  2. from random_walk import RandomWalk #导入RandomWalk类
  3. while True:
  4. #创建一个RandomWalk实例,存储在rw中
  5. rw=RandomWalk(50000)
  6. rw.fill_walk() #在调用fill_walk()
  7. #plt.scatter(rw.x_values,rw.y_values,s=15)
  8. #讲随机漫步包含的x和y传递给scatter(),选择点的尺寸为15
  9. point_numbers=list(range(rw.num_points))
  10. plt.scatter(rw.x_values,rw.y_values,c=point_numbers,cmap=plt.cm.Blues,
  11. edgecolors='none',s=1)
  12. #突出起点和终点
  13. plt.scatter(0,0,c='green',edgecolors='none',s=100)
  14. plt.scatter(rw.x_values[-1],rw.y_values[-1],c='red',edgecolors='none',s=100)
  15. #隐藏坐标轴
  16. plt.axes().get_xaxis().set_visible(False)
  17. plt.axes().get_yaxis().set_visible(False)
  18. plt.show()
  19. keep_running=input("是否要在模拟一次随机漫步(请输入是或否):")
  20. if keep_running=='否':
  21. break

这里修改了:
rw=RandomWalk(50000)
事例模拟了包含50000个点的随机
plt.scatter(rw.x_values,rw.y_values,c=point_numbers,cmap=plt.cm.Blues,
edgecolors=‘none’,s=1)
这里为了便于查看的更清晰,将点的大小修改为1
效果图如下:
在这里插入图片描述

6、调整尺寸以适应屏幕

为了便于有效的呈现,让绘图窗口更适合屏幕大小,可像matplotlib调整尺寸大小

在rw_visual.py文件中添加

  1. #设置绘图窗口的尺寸
  2. plt.figure(figsize=(10,6))

函数figure()用于指定图标的宽度、高度、分辨率和背景色,你需要给形参figsize指定一个元组,向matplotlib指出绘图窗口的尺寸

效果图如下:
在这里插入图片描述

综上随机漫步完毕!!!

附上完整的random_work.py和rw_visual.py文件

random_work.py

  1. from random import choice
  2. class RandomWalk():
  3. """一个生成随机漫步数据的类"""
  4. def __init__(self,num_points=5000):
  5. """初始化随机漫步的属性"""
  6. self.num_points=num_points
  7. #所有随机漫步都始于(0,0)
  8. self.x_values=[0]
  9. self.y_values=[0]
  10. def fill_walk(self):
  11. """计算随机漫步包含的所有的点"""
  12. #不断漫步,直到列表达到指定的的长度
  13. while len(self.x_values) < self.num_points:
  14. """决定前进方向以及沿这个方向前进的距离"""
  15. x_direction=choice([1,-1]) #表示要么向右走1,要么表示向左走1
  16. x_distance=choice([0,1,2,3,4]) #随机选择一个0~4之间的数,告诉Python沿着方向走多远
  17. x_step=x_direction*x_distance #移动方向乘以移动距离
  18. """x_step如果为正,将向右移动;如果为负,将向左移动,为零即垂直移动"""
  19. y_direction = choice([1, -1]) # 表示要么向右走1,要么表示向左走1
  20. y_distance = choice([0, 1, 2, 3, 4]) # 随机选择一个0~4之间的数,告诉Python沿着方向走多远
  21. y_step = y_direction * y_distance # 移动方向乘以移动距离
  22. """y_step如果为正,将向上移动;如果为负,将向下移动,为零即水平移动"""
  23. #拒绝原地踏步(即x_step和y_step都为0)
  24. if x_step==0 and y_step==0:
  25. continue
  26. #计算下一个点的x和y的值
  27. next_x=self.x_values[-1]+x_step #为了漫步下一个点的x的值,将x_step与x_values中的最后一个值相加
  28. next_y=self.y_values[-1]+y_step #为了漫步下一个点的y的值,将y_step与y_values中的最后一个值相加
  29. self.x_values.append(next_x) #获得下一个点的x值后附加的x_values末尾
  30. self.y_values.append(next_y) #获得下一个点的y值后附加的y_values末尾

rw_visual.py

  1. import matplotlib.pyplot as plt #导入pyplot模块
  2. from random_walk import RandomWalk #导入RandomWalk类
  3. while True:
  4. #创建一个RandomWalk实例,存储在rw中
  5. rw=RandomWalk(50000)
  6. rw.fill_walk() #在调用fill_walk()
  7. #设置绘图窗口的尺寸
  8. plt.figure(figsize=(10,6))
  9. #plt.scatter(rw.x_values,rw.y_values,s=15)
  10. #讲随机漫步包含的x和y传递给scatter(),选择点的尺寸为15
  11. point_numbers=list(range(rw.num_points))
  12. plt.scatter(rw.x_values,rw.y_values,c=point_numbers,cmap=plt.cm.Blues,
  13. edgecolors='none',s=1)
  14. #突出起点和终点
  15. plt.scatter(0,0,c='green',edgecolors='none',s=100)
  16. plt.scatter(rw.x_values[-1],rw.y_values[-1],c='red',edgecolors='none',s=100)
  17. #隐藏坐标轴
  18. plt.axes().get_xaxis().set_visible(False)
  19. plt.axes().get_yaxis().set_visible(False)
  20. plt.show()
  21. keep_running=input("是否要在模拟一次随机漫步(请输入是或否):")
  22. if keep_running=='否':
  23. break

不足之处,请指出,蟹蟹!!!

发表评论

表情:
评论列表 (有 0 条评论,94人围观)

还没有评论,来说两句吧...

相关阅读

    相关 简单随机漫步

         最近在看用Python进行数据分析这本书,里面提到了随机漫步,所以试了试。      今天把代码放这里,以后随时可以看看。 \\\\\\\\\\\\\\\\\\一