Python Matplotlib 基础的教程 (二) 随机漫步

随机漫步

首先我们导入choic来生成随机方向

from random import choice

choice() 方法的语法:

random.choice( seq )

seq -- 可以是一个列表,元组或字符串。

例如:

choice([0, 1, 2, 3, 4])

返回值为上面列表的随机一个

### 漫步数据的生成

我们来生成随机漫步的点:

class RandomWalk():
    
    def __init__(self, point=5000):
        """
        设置初始点坐标 并设置漫步次数 5000
        """
        self.point=point
        self.x=[0]
        self.y=[0]
    
    def fill_walk(self):
        # 不断循环直到达到漫步次数
        while len(self.x) < self.point:
            """
            计算前进方向和步数
            choice([1,-1]) 生成方向
            choice([0, 1, 2, 3, 4]) 生成步数
            相乘获得方向和距离
            """
            x_step = choice([1,-1]) * choice([0, 1, 2, 3, 4])
            y_step = choice([1,-1]) * choice([0, 1, 2, 3, 4])
            #拒绝原地踏步
            if x_step == 0 and y_step == 0:
                continue
            next_x = self.x[-1] + x_step
            next_y = self.y[-1] + y_step
            #将漫步后的值添加到X,Y值的列表里
            self.x.append(next_x)
            self.y.append(next_y)

 

大家应该还记得scatter()参数的值是X,Y两个值的列表叭,

所以用append()来将漫步后的值添加到X,Y的列表里

绘制

import matplotlib.pyplot as plt

rw = RandomWalk() #创建RW实例
rw.fill_walk() #生成X,Y值
plt.scatter(rw.x, rw.y, s=15)
plt.show()

绘点着色

还记得上一篇中的颜色映射吗?

在这里也是可以用的哦

我们将代码改成

plt.scatter(rw.x, rw.y, c=rw.point, cmap=plt.cm.Blues, s=15)

 

但是我们却收到了报错

ValueError: 'c' argument has 1 elements, which is inconsistent with 'x' and 'y' with size 5000.

大意就是 ValueError:'c'参数包含1个元素,与大小为5000的'x'和'y'不一致。

所以我们需要通过range()来生成一个数字列表

pointList = list(range(rw.point))
plt.scatter(rw.x, rw.y, c=pointList, cmap=plt.cm.Blues, s=15)

调整尺寸

plt.figure(dpi=128, figsize=(10,6))

figsize()设置的是窗口大小,单位嘛,是英尺

dpi的值意思为像素/英尺默认是80,即80像素/英尺

完整代码

使用类和函数

import matplotlib.pyplot as plt
from random import choice
class RandomWalk():
    
    def __init__(self, point=5000):
        """
        设置初始点坐标 并设置漫步次数
        """
        self.point=point
        self.x=[0]
        self.y=[0]
    
    def fill_walk(self):
        # 不断循环直到达到漫步次数
        while len(self.x) < self.point:
            """
            计算前进方向和步数
            choice([1,-1]) 生成方向
            choice([0, 1, 2, 3, 4]) 生成步数
            相乘获得方向和距离
            """
            x_step = choice([1,-1]) * choice([0, 1, 2, 3, 4])
            y_step = choice([1,-1]) * choice([0, 1, 2, 3, 4])
            #拒绝原地踏步
            if x_step == 0 and y_step == 0:
                continue
            next_x = self.x[-1] + x_step
            next_y = self.y[-1] + y_step
            #将漫步后的值添加到X,Y值的列表里
            self.x.append(next_x)
            self.y.append(next_y)

rw = RandomWalk() #创建RW实例
rw.fill_walk()    #生成X,Y值
pointList = list(range(rw.point))
plt.figure(dpi=128, figsize=(10,6))
plt.scatter(rw.x, rw.y, c=pointList, cmap=plt.cm.Blues, s=15)
plt.show()

 

 

不使用类和函数的简单版

注释请参考上面

import matplotlib.pyplot as plt
from random import choice

point=5000 #设置漫步次数
x = [0]
y = [0]
while len(x) < point:
    x_step = choice([1,-1]) * choice([0, 1, 2, 3, 4])
    y_step = choice([1,-1]) * choice([0, 1, 2, 3, 4])
    if x_step == 0 and y_step == 0:
        continue
    next_x = x[-1] + x_step
    next_y = y[-1] + y_step
    x.append(next_x)
    y.append(next_y)
    
pointList = list(range(rw.point))
plt.figure(dpi=128, figsize=(10,6))
plt.scatter(x, y, c=pointList, cmap=plt.cm.Blues, s=15)
plt.show()

 

彩蛋

1亿次随机漫步

Google colab宣告失败

goorm 宣告失败

1百万次随机漫步

Google colab花费34.408670s

goorm 花费1Min

由于endtime写错位置了,不包括保存图片所消耗的时间

生成的图片高达15.09M

地址:

https://file.2002000.xyz/egg.png

参考


In solitude,where we are least alone