python+matplotlib实现动态绘制图片实例代码(交互式绘图)


Posted in Python onJanuary 20, 2018

本文研究的主要是python+matplotlib实现动态绘制图片(交互式绘图)的相关内容,具体介绍和实现代码如下所示。

最近在研究动态障碍物避障算法,在Python语言进行算法仿真时需要实时显示障碍物和运动物的当前位置和轨迹,利用Anaconda的Python打包集合,在Spyder中使用Python3.5语言和matplotlib实现路径的动态显示和交互式绘图(和Matlab功能类似)。

Anaconda是一个用于科学计算的Python发行版,支持 Linux, Mac, Windows系统,提供了包管理与环境管理的功能,可以很方便地解决多版本python并存、切换以及各种第三方包安装问题。Anaconda利用工具/命令conda来进行package和environment的管理,并且已经包含了Python和相关的配套工具。Anaconda官方地址:https://www.continuum.io/downloads/

matplotlib 是python最著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地进行制图。而且也可以方便地将它作为绘图控件,嵌入GUI应用程序中。其中,matplotlib的pyplot子库提供了和matlab类似的绘图API,方便用户快速绘制2D图表,它的文档相当完备,并且 Gallery页面中有上百幅缩略图,打开之后都有源程序。matplotlib官方地址:http://matplotlib.org/

在调研matplotlib动态绘制曲线方法中,和matlab相似有animation方法和交互式绘图,但是animation方法灵活性不高,不太适合路径的实时动态显示,本文最后采用交互式绘图模(interactive mode)。具体参见http://matplotlib.org/users/shell.html。

The interactive property of the pyplot interface controls whether a figure canvas is drawn on every pyplot command. If interactive is False, then the figure state is updated on every plot command, but will only be drawn on explicit calls to draw(). When interactive is True, then every pyplot command triggers a draw.

当绘图语句中加入pl.ion()时,表示打开了交互模式。此时python解释器解释完所有命令后,给你出张图,但不会结束会话,而是等着你跟他交流交流。如果你继续往代码中加入语句,run之后,你会实时看到图形的改变。当绘图语句中加入pl.ioff()时或不添加pl.ion()时,表示打关了交互模式。此时要在代码末尾加入pl.show()才能显示图片。python解释器解释完所有命令后,给你出张图,同时结束会话。如果你继续往代码中加入语句,再不会起作用,除非你关闭当前图片,重新run。

采用交互式绘图模式后,可以方便地绘出障碍物的运动轨迹和当前位置,深切感觉matplotlib和matlab很类似,基本matlab的功能都可以在matplotlib中找到,所以matlab中的代码也可以很快移植到python中!

代码示例:

# -*- coding: utf-8 -*-
"""
Created on Sat Mar 25 23:28:29 2017

@author: wyl
"""

import matplotlib.pyplot as plt
from matplotlib.patches import Circle
import numpy as np
import math
  
plt.close() #clf() # 清图 cla() # 清坐标轴 close() # 关窗口
fig=plt.figure()
ax=fig.add_subplot(1,1,1)
ax.axis("equal") #设置图像显示的时候XY轴比例
plt.grid(True) #添加网格
plt.ion() #interactive mode on
IniObsX=0000
IniObsY=4000
IniObsAngle=135
IniObsSpeed=10*math.sqrt(2)  #米/秒
print('开始仿真')
try:
  for t in range(180):
    #障碍物船只轨迹
    obsX=IniObsX+IniObsSpeed*math.sin(IniObsAngle/180*math.pi)*t
    obsY=IniObsY+IniObsSpeed*math.cos(IniObsAngle/180*math.pi)*t
    ax.scatter(obsX,obsY,c='b',marker='.') #散点图
    #ax.lines.pop(1) 删除轨迹
    #下面的图,两船的距离
    plt.pause(0.001)
except Exception as err:
  print(err)

演示结果:

python+matplotlib实现动态绘制图片实例代码(交互式绘图)

总结

以上就是本文关于python+matplotlib实现动态绘制图片实例代码(交互式绘图)的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

Python 相关文章推荐
Django中实现点击图片链接强制直接下载的方法
May 14 Python
python实现的正则表达式功能入门教程【经典】
Jun 05 Python
对numpy中的数组条件筛选功能详解
Jul 02 Python
python 利用for循环 保存多个图像或者文件的实例
Nov 09 Python
详解pyenv下使用python matplotlib模块的问题解决
Nov 29 Python
Python读取YUV文件,并显示的方法
Dec 04 Python
python 根据时间来生成唯一的字符串方法
Jan 14 Python
Python把对应格式的csv文件转换成字典类型存储脚本的方法
Feb 12 Python
Python网络爬虫之爬取微博热搜
Apr 18 Python
Python 的字典(Dict)是如何存储的
Jul 05 Python
python 爬取学信网登录页面的例子
Aug 13 Python
使用pyshp包进行shapefile文件修改的例子
Dec 06 Python
Python实现PS滤镜的旋转模糊功能示例
Jan 20 #Python
浅谈flask中的before_request与after_request
Jan 20 #Python
Python使用SQLite和Excel操作进行数据分析
Jan 20 #Python
python与sqlite3实现解密chrome cookie实例代码
Jan 20 #Python
Python实现PS滤镜中马赛克效果示例
Jan 20 #Python
浅析python协程相关概念
Jan 20 #Python
Python实现可自定义大小的截屏功能
Jan 20 #Python
You might like
smarty+adodb+部分自定义类的php开发模式
2006/12/31 PHP
zf框架的Filter过滤器使用示例
2014/03/13 PHP
[原创]php求圆周率的简单实现方法
2016/05/30 PHP
php验证码生成器
2017/05/24 PHP
Jquery实现图片左右自动滚动示例
2013/09/25 Javascript
javascript获取ckeditor编辑器的值(实现代码)
2013/11/18 Javascript
JavaScript鼠标事件,点击鼠标右键,弹出div的简单实例
2016/08/03 Javascript
基于Layer+jQuery的自定义弹框
2020/05/26 Javascript
ajax级联菜单实现方法实例分析
2016/11/28 Javascript
JS ES6中setTimeout函数的执行上下文示例
2017/04/27 Javascript
AngularJS全局警告框实现方法示例
2017/05/18 Javascript
JS 仿支付宝input文本输入框放大组件的实例
2017/11/14 Javascript
Vue解析带html标签的字符串为dom的实例
2019/11/13 Javascript
在Vue项目中使用Typescript的实现
2019/12/19 Javascript
Webpack设置环境变量的一些误区详解
2019/12/19 Javascript
Windows下安装 node 的版本控制工具 nvm
2020/02/06 Javascript
Python3指定路径寻找符合匹配模式文件
2015/05/22 Python
简单介绍Python中的几种数据类型
2016/01/02 Python
对python中的for循环和range内置函数详解
2018/04/17 Python
python中itertools模块zip_longest函数详解
2018/06/12 Python
Python3.4学习笔记之列表、数组操作示例
2019/03/01 Python
python 杀死自身进程的实现方法
2019/07/01 Python
python从list列表中选出一个数和其对应的坐标方法
2019/07/20 Python
基于python3实现倒叙字符串
2020/02/18 Python
django orm模块中的 is_delete用法
2020/05/20 Python
python批量处理多DNS多域名的nslookup解析实现
2020/06/28 Python
详解python命令提示符窗口下如何运行python脚本
2020/09/11 Python
世界上获奖最多的手机镜头:Olloclip
2018/03/03 全球购物
质检部经理岗位职责
2014/02/19 职场文书
初三学生评语大全
2014/04/24 职场文书
机械电子工程专业自荐书
2014/06/10 职场文书
一般基层干部群众路线教育实践活动个人对照检查材料
2014/11/04 职场文书
个人先进事迹材料
2014/12/29 职场文书
上班迟到检讨书范文
2015/05/06 职场文书
《一面五星红旗》教学反思
2016/02/23 职场文书
Spring Boot 实现敏感词及特殊字符过滤处理
2021/06/29 Java/Android