编程语言
首页 > 编程语言> > 随机漫步python

随机漫步python

作者:互联网

随机漫步这个例子出自《Python编程:从入门到实践》

创建RandomWalk()类

包含__init__()和fill_walk()

random_walk.py

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_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)
            

 

绘制随机漫步图

rw_visual.py

import matplotlib.pyplot as plt
from random_walk import RandomWalk

#构建一个RandomWalk实例,并将其包含的点都绘制出来
rw = RandomWalk()
rw.fill_walk()

plt.scatter(rw.x_values, rw.y_values, s=1)
plt.show()

       

 每次都不一样,如果想找它的先后顺序,我们就要给它上色

 

给点着色

cmap再次出场

关键语句

plt.scatter(rw.x_values, rw.y_values, c=point_numbers, cmap=plt.cm.Blues, edgecolor=None, s=15)

随着c的变化,颜色会渐变,艺术品的感jio

 

全部代码

import matplotlib.pyplot as plt
from random_walk import RandomWalk

while True:
    #构建一个RandomWalk实例,并将其包含的点都绘制出来
    rw = RandomWalk()
    rw.fill_walk()

    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=15)

    plt.show()

    keep_running = input("Make another walk?(y/n):")#多画几次
    if keep_running == 'n':
        break

 什么?你还想知道起点和终点?

 

绘制起点和终点

起点(0,0)用绿色,终点用红色,而且比较大(s=100)

关键语句

    #突出起点和终点
    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)

全部代码

import matplotlib.pyplot as plt
from random_walk import RandomWalk

while True:
    #构建一个RandomWalk实例,并将其包含的点都绘制出来
    rw = RandomWalk()
    rw.fill_walk()

    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=15)

    #突出起点和终点
    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.show()

    keep_running = input("Make another walk?(y/n):")
    if keep_running == 'n':
        break
View Code

  一目了然

 

隐藏坐标轴

关键语句

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

全部代码

import matplotlib.pyplot as plt
from random_walk import RandomWalk

while True:
    #构建一个RandomWalk实例,并将其包含的点都绘制出来
    rw = RandomWalk()
    rw.fill_walk()

    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=15)

    #突出起点和终点
    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().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
View Code

 

增加点数

创建实例时,给它一个较大的num_points

关键语句

rw = RandomWalk(50000)

全部代码

import matplotlib.pyplot as plt
from random_walk import RandomWalk

while True:
    #构建一个RandomWalk实例,并将其包含的点都绘制出来
    rw = RandomWalk(50000)
    rw.fill_walk()

    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=1)

    #突出起点和终点
    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().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
View Code

 

 

调整尺寸以适应屏幕

在fill_walk()后插入关键语句

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

 

 这里第一次提到figure(),用于指定图表的宽度、高度、分辨率和背景色。你需要给形参figsize指定一个元组,向matplotlib指出绘图窗口的尺寸,单位为英寸。

Python假定屏幕分辨率为80像素/英寸。如果你知道自己的系统的分辨率,可使用形参dpi向figure()传递该分辨率,以有效地利用可用的屏幕空间,如下所示:

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

 

 

2020-03-04

标签:rw,漫步,python,walk,plt,values,随机,RandomWalk,scatter
来源: https://www.cnblogs.com/jie-74/p/12408596.html