python使用matplotlib库生成随机漫步图


Posted in Python onAugust 27, 2018

本教程使用python来生成随机漫步数据,再使用matplotlib将数据呈现出来

开发环境

操作系统: Windows10
IDE: Pycharm 2017.1.3
Python版本: Python3.6
Python第三方库:matplotlib

开始实战

1. 创建RandomWalk()类

为了模拟随机漫步,我们将创建一个名为RandomWalk的类, 它随机地选择方向。

from random import choice

class RandomWalk():
  """一个生成随机漫步数据的类"""

  def __init__(self, num_points=50000):
    """初始化随机漫步的属性"""
    self.num_points = num_points

    # 所有随机漫步都始于(0,0)
    self.x_values = [0]
    self.y_values = [0]

这个类有三个属性,一个存储随机漫步次数的变量,其他两个存储随机漫步经过的x和y坐标。RandomWalk只包含两个方法:init()和 fill_walk()

2. 选择方向

我们将使用 fill_walk() 来生成漫步包含的点,并决定漫步的方向

def fill_walk(self):
    """计算随机漫步包含的所有点"""

    # 不断漫步,直到列表达到指定的长度
    while len(self.x_values) < self.num_points:
      # 决定前进方向以及沿这个方向前进的距离
      x_direction = choice([1,- 1])
      x_distance = choice([1, 2, 3, 4])
      x_step = x_direction * x_distance

      y_direction = choice([1, -1])
      y_distance = choice([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([1, -1])给x_direction选择一个值,-1代表向左走, 1代表向右走。
choice([0, 1, 2, 3, 4])随机选择0-4之间的整数,告诉python沿指定方向走多远

3. 绘制随机漫步图

import matplotlib.pyplot as plt

from randomwalk import RandomWalk

# 只要程序处于活动状态,就不断地模拟随机漫步
while True:
  # 创建一个RandomWalk实列,并将其包含的点都绘制出来
  rw = RandomWalk()
  rw.fill_walk()

  plt.figure(dpi=128, figsize=(8, 4))

  point_numbers = list(range(rw.num_points))
  plt.scatter(rw.x_values, rw.y_values, c=point_numbers, cmap=plt.cm.Reds, edgecolors='none', s=1)
  # 突出起点和终点
  plt.scatter(0, 0, c='green', edgecolors='none', s=100)
  plt.scatter(rw.x_values[-1], rw.y_values[-1], c='red', edgecolors='none', s=100)
  plt.show()

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

创建一个RandomWalk实例,在调用 fill_walk() 方法,我们将随机漫步x、y和次数传递给scatter(),并选择了合适的尺寸。并绘制了起点和终点。

4. 运行结果

python使用matplotlib库生成随机漫步图

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python3实现连接SQLite数据库的方法
Aug 23 Python
python嵌套函数使用外部函数变量的方法(Python2和Python3)
Jan 31 Python
Python松散正则表达式用法分析
Apr 29 Python
Python中datetime模块参考手册
Jan 13 Python
Python绘制正余弦函数图像的方法
Aug 28 Python
Ubuntu下Anaconda和Pycharm配置方法详解
Jun 14 Python
Python 从subprocess运行的子进程中实时获取输出的例子
Aug 14 Python
Python实现i人事自动打卡的示例代码
Jan 09 Python
Python 定义只读属性的实现方式
Mar 05 Python
简单了解python关键字global nonlocal区别
Sep 21 Python
基于PyTorch中view的用法说明
Mar 03 Python
python实现socket简单通信的示例代码
Apr 13 Python
Python面向对象之接口、抽象类与多态详解
Aug 27 #Python
python实现随机漫步算法
Aug 27 #Python
Python3随机漫步生成数据并绘制
Aug 27 #Python
python如何生成各种随机分布图
Aug 27 #Python
python随机数分布random测试
Aug 27 #Python
pycharm安装和首次使用教程
Aug 27 #Python
Windows下PyCharm安装图文教程
Aug 27 #Python
You might like
php array_flip() 删除数组重复元素
2009/01/14 PHP
PHP CLI模式下的多进程应用分析
2013/06/03 PHP
PHP加Nginx实现动态裁剪图片方案
2014/03/10 PHP
PHP的PDO连接讲解
2019/01/24 PHP
用js判断输入是否为中文的函数
2014/03/10 Javascript
javascript实现避免页面按钮重复提交
2015/01/08 Javascript
JavaScript定时显示广告代码分享
2015/03/02 Javascript
javascript操作ul中li的方法
2015/05/14 Javascript
jQuery无刷新分页完整实例代码
2015/10/27 Javascript
javascript实现input file上传图片预览效果
2015/12/31 Javascript
使用Ajax与服务器(JSON)通信实例
2016/11/04 Javascript
vue使用keep-alive保持滚动条位置的实现方法
2019/04/09 Javascript
详解一次Vue低版本安卓白屏问题的解决过程
2019/05/30 Javascript
深入理解javascript prototype的相关知识
2019/09/19 Javascript
JS代码检查工具ESLint介绍与使用方法
2020/02/04 Javascript
JavaScript实现放大镜效果代码示例
2020/04/29 Javascript
angula中使用iframe点击后不执行变更检测的问题
2020/05/10 Javascript
jQuery+Ajax+js实现请求json格式数据并渲染到html页面操作示例
2020/06/02 jQuery
在windows下快速搭建web.py开发框架方法
2016/04/22 Python
Python cookbook(数据结构与算法)找到最大或最小的N个元素实现方法示例
2018/02/13 Python
Python cookbook(数据结构与算法)从序列中移除重复项且保持元素间顺序不变的方法
2018/03/13 Python
Django管理员账号和密码忘记的完美解决方法
2018/12/06 Python
python自定义线程池控制线程数量的示例
2019/02/22 Python
python 实现12bit灰度图像映射到8bit显示的方法
2019/07/08 Python
python urllib爬虫模块使用解析
2019/09/05 Python
2020新版本pycharm+anaconda+opencv+pyqt环境配置学习笔记,亲测可用
2020/03/24 Python
python小白切忌乱用表达式
2020/05/29 Python
Python爬虫入门教程01之爬取豆瓣Top电影
2021/01/24 Python
生产管理的三大手法
2013/11/11 职场文书
会计毕业生自荐书
2014/06/12 职场文书
2014年政风行风工作总结
2014/11/22 职场文书
2015年中秋节演讲稿
2015/03/20 职场文书
家长会感言
2015/08/01 职场文书
离婚起诉书范文2016
2015/11/26 职场文书
golang中的空slice案例
2021/04/27 Golang
Windows server 2012 配置Telnet以及用法详解
2022/04/28 Servers