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通过imaplib模块读取gmail里邮件的方法
May 08 Python
详解python开发环境搭建
Dec 16 Python
python类的继承实例详解
Mar 30 Python
解决Python字典写入文件出行首行有空格的问题
Sep 27 Python
基于windows下pip安装python模块时报错总结
Jun 12 Python
深入浅析Python的类
Jun 22 Python
pandas DataFrame 删除重复的行的实现方法
Jan 29 Python
Python初学者常见错误详解
Jul 02 Python
python3的UnicodeDecodeError解决方法
Dec 20 Python
TensorFlow tf.nn.conv2d实现卷积的方式
Jan 03 Python
OpenCV 使用imread()函数读取图片的六种正确姿势
Jul 09 Python
用python基于appium模块开发一个自动收取能量的小助手
Sep 25 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中mkdir()函数的权限问题分析
2016/09/24 PHP
Laravel框架中集成MongoDB和使用详解
2019/10/17 PHP
Javascript 中的 &amp;&amp; 和 || 使用小结
2010/04/25 Javascript
jQuery中data()方法用法实例
2014/12/27 Javascript
jquery实现对联广告的方法
2015/02/05 Javascript
在Python中使用glob模块查找文件路径的方法
2015/06/17 Javascript
使用 stylelint检查CSS_StyleLint
2016/04/28 Javascript
利用JavaScript阻止表单提交的两种方法
2016/08/11 Javascript
详解vue-cli与webpack结合如何处理静态资源
2017/09/19 Javascript
微信小程序支付及退款流程详解
2017/11/30 Javascript
使用vue-router beforEach实现判断用户登录跳转路由筛选功能
2018/06/25 Javascript
JavaScript 预解析的4种实现方法解析
2019/09/03 Javascript
微信小程序tab切换可滑动切换导航栏跟随滚动实现代码
2019/09/04 Javascript
js实现二级联动简单实例
2020/01/11 Javascript
[10:04]国际邀请赛采访专栏:DK.Farseer,mouz.Black^,采访员Josh专访
2013/08/05 DOTA
[04:48]DOTA2亚洲邀请赛林书豪为VGJ加油
2017/04/01 DOTA
Python实现的简单发送邮件脚本分享
2014/11/07 Python
python在Windows8下获取本机ip地址的方法
2015/03/14 Python
pandas获取groupby分组里最大值所在的行方法
2018/04/20 Python
使用python 3实现发送邮件功能
2018/06/15 Python
python-str,list,set间的转换实例
2018/06/27 Python
pandas read_excel()和to_excel()函数解析
2019/09/19 Python
python中round函数如何使用
2020/06/19 Python
浅谈Python爬虫原理与数据抓取
2020/07/21 Python
Python reversed反转序列并生成可迭代对象
2020/10/22 Python
html5+css3实现一款注册表单实例
2013/04/17 HTML / CSS
10个最常见的HTML5面试题 附答案
2016/06/06 HTML / CSS
旅游管理专业学生求职信
2013/09/28 职场文书
会计自我鉴定
2013/11/02 职场文书
技校生自我鉴定
2013/12/08 职场文书
事业单位竞聘上岗实施方案
2014/03/28 职场文书
市级优秀班主任事迹材料
2014/05/13 职场文书
2016年国培研修日志
2015/11/13 职场文书
2016年小学推普宣传周活动总结
2016/04/06 职场文书
Python 解决空列表.append() 输出为None的问题
2021/05/23 Python
MySQL表锁、行锁、排它锁及共享锁的使用详解
2022/04/02 MySQL