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 相关文章推荐
python使用wxPython打开并播放wav文件的方法
Apr 24 Python
Python的string模块中的Template类字符串模板用法
Jun 27 Python
Python+tkinter使用40行代码实现计算器功能
Jan 30 Python
python实现微信远程控制电脑
Feb 22 Python
python使用opencv按一定间隔截取视频帧
Mar 06 Python
对python中执行DOS命令的3种方法总结
May 12 Python
基于python代码实现简易滤除数字的方法
Jul 17 Python
Python 中如何实现参数化测试的方法示例
Dec 10 Python
Python dict的常用方法示例代码
Jun 23 Python
django前端页面下拉选择框默认值设置方式
Aug 09 Python
python 实现简易的记事本
Nov 30 Python
基于Python实现射击小游戏的制作
Apr 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
php防止sql注入示例分析和几种常见攻击正则表达式
2014/01/12 PHP
PHP+jQuery 注册模块开发详解
2014/10/14 PHP
源码分析 Laravel 重复执行同一个队列任务的原因
2017/12/25 PHP
php-fpm中max_children的配置
2019/03/15 PHP
比较详细的关于javascript中void(0)的具体含义解释
2007/08/02 Javascript
jquery中获取select选中值的代码
2011/06/27 Javascript
获取body标签的两种方法
2011/10/13 Javascript
JavaScript中使用构造器创建对象无需new的情况说明
2012/03/01 Javascript
js css后面所带参数含义介绍
2013/08/18 Javascript
JS的document.all函数使用示例
2013/12/30 Javascript
JavaScript中的some()方法使用详解
2015/06/09 Javascript
基于Jquery easyui 选中特定的tab
2015/11/17 Javascript
Angular2-primeNG文件上传模块FileUpload使用详解
2017/01/14 Javascript
深入浅出webpack教程系列_安装与基本打包用法和命令参数详解
2017/09/10 Javascript
使用命令行工具npm新创建一个vue项目的方法
2017/12/27 Javascript
微信小程序进入广告实现代码实例
2019/09/19 Javascript
原生JavaScript写出Tabs标签页的实例代码
2020/07/20 Javascript
使用python实现rsa算法代码
2016/02/17 Python
python实现对文件中图片生成带标签的txt文件方法
2018/04/27 Python
对python抓取需要登录网站数据的方法详解
2018/05/21 Python
Python opencv实现人眼/人脸识别以及实时打码处理
2019/04/29 Python
django框架创建应用操作示例
2019/09/26 Python
pytorch逐元素比较tensor大小实例
2020/01/03 Python
python实现在线翻译功能
2020/03/03 Python
Python多进程编程常用方法解析
2020/03/26 Python
使用BeautifulSoup4解析XML的方法小结
2020/12/07 Python
新加坡航空官方网站:Singapore Airlines
2016/10/13 全球购物
台湾团购、宅配和优惠券:17Life
2017/08/14 全球购物
Koral官方网站:女性时尚运动服
2019/04/10 全球购物
酒店前台接待岗位职责
2013/12/03 职场文书
中国好声音华少广告词
2014/03/17 职场文书
会计主管岗位职责
2015/04/02 职场文书
乔布斯辞职信(中英文对照)
2015/05/12 职场文书
2016大一新生入学教育心得体会
2016/01/23 职场文书
Python requests用法和django后台处理详解
2022/03/19 Python
Win11 PC上的Outlook搜索错误怎么办?
2022/07/15 数码科技