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函数编程的一些特性
Apr 13 Python
python脚本监控docker容器
Apr 27 Python
实例解析Python中的__new__特殊方法
Jun 02 Python
Python单体模式的几种常见实现方法详解
Jul 28 Python
python实现狄克斯特拉算法
Jan 17 Python
python3 自动识别usb连接状态,即对usb重连的判断方法
Jul 03 Python
简单了解python关键字global nonlocal区别
Sep 21 Python
解决python3中os.popen()出错的问题
Nov 19 Python
如何基于Python和Flask编写Prometheus监控
Nov 25 Python
python3中数组逆序输出方法
Dec 01 Python
python基于opencv实现人脸识别
Jan 04 Python
Python3使用Qt5来实现简易的五子棋小游戏
May 02 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
Yii2中SqlDataProvider用法示例
2016/09/22 PHP
基于PHP实现邮箱验证激活过程详解
2020/10/28 PHP
JS保存和删除cookie操作 判断cookie是否存在
2013/11/13 Javascript
AngularJS入门教程(一):静态模板
2014/12/06 Javascript
JavaScript的Backbone.js框架入门学习指引
2016/05/07 Javascript
详解JavaScript调用栈、尾递归和手动优化
2017/06/03 Javascript
jQuery实现点击下拉框中的值累加到文本框中的方法示例
2017/10/28 jQuery
代码详解Vuejs响应式原理
2017/12/20 Javascript
微信小程序如何获取用户信息
2018/01/26 Javascript
JavaScript的Object.defineProperty详解
2018/07/09 Javascript
修改vue源码实现动态路由缓存的方法
2020/01/21 Javascript
[08:38]DOTA2-DPC中国联赛 正赛 VG vs Elephant 选手采访
2021/03/11 DOTA
sqlalchemy对象转dict的示例
2014/04/22 Python
对于Python异常处理慎用“except:pass”建议
2015/04/02 Python
python使用arp欺骗伪造网关的方法
2015/04/24 Python
python使用htmllib分析网页内容的方法
2015/05/08 Python
使用Python3制作TCP端口扫描器
2017/04/17 Python
Python中enumerate函数代码解析
2017/10/31 Python
Python中property属性实例解析
2018/02/10 Python
python创建属于自己的单词词库 便于背单词
2019/07/30 Python
Python将视频或者动态图gif逐帧保存为图片的方法
2019/09/10 Python
python3.7将代码打包成exe程序并添加图标的方法
2019/10/11 Python
python 队列基本定义与使用方法【初始化、赋值、判断等】
2019/10/24 Python
python 写函数在一定条件下需要调用自身时的写法说明
2020/06/01 Python
python 代码运行时间获取方式详解
2020/09/18 Python
matplotlib之属性组合包(cycler)的使用
2021/02/24 Python
HTML5 CSS3新的WEB标准和浏览器支持
2009/07/16 HTML / CSS
浅析移动设备HTML5页面布局
2015/12/01 HTML / CSS
HTML5 背景的显示区域实现
2020/07/09 HTML / CSS
美国鞋类购物网站:Shiekh Shoes
2016/08/21 全球购物
JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗?
2013/07/02 面试题
创联软件面试题笔试题
2012/10/07 面试题
拉丁舞学习者的自我评价
2013/10/27 职场文书
临床医师个人自我评价
2014/04/06 职场文书
机械系毕业生求职信
2014/05/28 职场文书
乒乓球兴趣小组活动总结
2014/07/08 职场文书