Python自学笔记

matplotlib实现随机漫步

2020-03-18  本文已影响0人  第六九书

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参数,数值越小,颜色越浅,数值越大,颜色越深。

  1. 增设一个变量,用以统计点的个数,并用于后面的cmap使用。由于是逐个添加的,所以数值越大,越是最后绘制的点。point_numbers = list(range(rw.num_points))
  2. 在scatter()中增加cmap设置,即增加c=point_numbers,cmap=plt.cm.Blues。使用matplotlib中内置的Blues系列颜色。
  3. 最后的scatter()是这样的:plt.scatter(rw.x_values,rw.y_values,s=5,c=point_numbers,cmap=plt.cm.Blues)
  4. 绘制结果如下图:


    颜色映射后的随机漫步图

可以看出基本的趋势如下图:


基本走势示意图

plt.figure(figsize=(12,8))
plt.scatter(rw.x_values,rw.y_values,s=5,c=point_numbers,cmap=plt.cm.Blues)
上一篇 下一篇

猜你喜欢

热点阅读