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 相关文章推荐
python代码制作configure文件示例
Jul 28 Python
Python连接DB2数据库
Aug 27 Python
用Python设计一个经典小游戏
May 15 Python
Python 由字符串函数名得到对应的函数(实例讲解)
Aug 10 Python
详解python3中zipfile模块用法
Jun 18 Python
Python实现快速计算词频功能示例
Jun 25 Python
Python字符串通过'+'和join函数拼接新字符串的性能测试比较
Mar 05 Python
python使用selenium实现批量文件下载
Mar 11 Python
Pandas_cum累积计算和rolling滚动计算的用法详解
Jul 04 Python
详解python解压压缩包的五种方法
Jul 05 Python
使用Python实现牛顿法求极值
Feb 10 Python
jupyter notebook运行命令显示[*](解决办法)
May 18 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 一个随机字符串生成代码
2010/05/26 PHP
php中base64_decode与base64_encode加密解密函数实例
2014/11/24 PHP
php缓冲输出实例分析
2015/01/05 PHP
[原创]js与自动伸缩图片 自动缩小图片的多浏览器兼容的方法总结
2007/03/12 Javascript
JavaScript之引用类型介绍
2012/08/10 Javascript
一个简单的网站访问JS计数器 刷新1次加1次访问
2012/09/20 Javascript
鼠标滚轮改变图片大小的示例代码
2013/11/20 Javascript
jQuery在页面加载时动态修改图片尺寸的方法
2015/03/20 Javascript
Ajax分页插件Pagination从前台jQuery到后端java总结
2016/07/22 Javascript
JS实现获取当前URL和来源URL的方法
2016/08/24 Javascript
Javascript中函数名.length属性用法分析(对比arguments.length)
2016/09/16 Javascript
原生javascript移动端滑动banner效果
2017/03/10 Javascript
layui使用label标签的方法
2019/09/14 Javascript
Js生成随机数/随机字符串的方法小结【5种方法】
2020/05/27 Javascript
详解JavaScript中的链式调用
2020/11/27 Javascript
python 实现堆排序算法代码
2012/06/05 Python
python中使用urllib2获取http请求状态码的代码例子
2014/07/07 Python
Python中用pycurl监控http响应时间脚本分享
2015/02/02 Python
Python eval的常见错误封装及利用原理详解
2019/03/26 Python
Python GUI编程完整示例
2019/04/04 Python
selenium 安装与chromedriver安装的方法步骤
2019/06/12 Python
如何通过雪花算法用Python实现一个简单的发号器
2019/07/03 Python
Python之Django自动实现html代码(下拉框,数据选择)
2020/03/13 Python
解决django中form表单设置action后无法回到原页面的问题
2020/03/13 Python
Python pymysql模块安装并操作过程解析
2020/10/13 Python
matplotlib阶梯图的实现(step())
2021/03/02 Python
浅析css3中matrix函数的使用
2016/06/06 HTML / CSS
HTML5 Canvas 实现圆形进度条并显示数字百分比效果示例
2017/08/18 HTML / CSS
电气专业应届生求职信
2013/11/01 职场文书
汽车制造与装配专业自荐信范文
2014/01/02 职场文书
临床护理求职信
2014/04/26 职场文书
精神文明建设标语
2014/06/16 职场文书
领导干部“四风”问题批评与自我批评材料
2014/09/24 职场文书
小区门卫的岗位职责
2014/09/26 职场文书
信访稳定工作汇报
2014/10/27 职场文书
2016年精神文明建设先进个人事迹材料
2016/02/29 职场文书