绘制随机漫步图

 
# incoding=gbk

import matplotlib.pyplot as plt

from random_walk import RandomWalk

# 只要程序处于活动状态,就不断地摸拟随机漫步
while True:
    # 创建一个RandomWalk实例,并将其包含的点都绘制出来
    rw = RandomWalk(50000)
    rw.fill_walk()
    
    # 设置绘图窗口的尺寸
    """
    函数figure()用于指定图表的宽度、高度、分辨率和背景色。你需要给形参figsize
    指定一个元组,向matplotlib指出绘图窗口的尺寸,单位为英寸。如果你知道自己的
    系统的分辨率,可使用形参dpi向figure()传递该分辨率,以有效地利用可用的屏幕空间
    """
    plt.figure(dpi=128, figsize=(10, 6))
    
    point_numbers = list(range(rw.num_points))
    plt.scatter(rw.x_values, rw.y_values, c=point_numbers, 
        cmap=plt.cm.Blues, edgecolor='none', s=3)
    
    # 突出起点和终点
    plt.scatter(0, 0, c='green', edgecolor='none', s=100)
    plt.scatter(rw.x_values[-1], rw.y_values[-1], c='red', 
        edgecolor='none', s=100)
    
    # 隐藏坐标轴
    """函数plt.axes()来将每条坐标轴的可见性都设置为False。"""
    plt.axes().get_xaxis().set_visible(False)
    plt.axes().get_yaxis().set_visible(False)
    
    plt.show()
    
    keep_running = input("Make another walk?(y/n):")
    if keep_running == 'n':
        break

 

# incoding=gbk

from random import choice

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_step = self.get_step()
            y_step = self.get_step()
            
            # 拒绝原地踏步
            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)
        
    def get_step(self):
        """确定每次漫步的距离和方向"""
        direction = choice([1, -1])
        distance = choice([0, 1, 2, 3, 4])
        step = direction * distance
        return step

 

posted @ 2020-07-28 17:23  tzg_雨中人  阅读(163)  评论(0)    收藏  举报