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抓取网页图片示例(python爬虫)
Apr 27 Python
Python中自定义函数的教程
Apr 27 Python
剖析Python的Tornado框架中session支持的实现代码
Aug 21 Python
使用pandas模块读取csv文件和excel表格,并用matplotlib画图的方法
Jun 22 Python
Python+OpenCV图片局部区域像素值处理改进版详解
Jan 23 Python
Python切片操作去除字符串首尾的空格
Apr 22 Python
elasticsearch python 查询的两种方法
Aug 04 Python
利用Python产生加密表和解密表的实现方法
Oct 15 Python
Python3.7 读取 mp3 音频文件生成波形图效果
Nov 05 Python
python可迭代对象去重实例
May 15 Python
Python使用shutil模块实现文件拷贝
Jul 31 Python
python调用ffmpeg命令行工具便捷操作视频示例实现过程
Nov 01 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代码(星期六,星期日总和)
2009/11/12 PHP
PHP表单递交控件名称含有点号(.)会被转化为下划线(_)的处理方法
2013/01/06 PHP
php防止站外远程提交表单的方法
2014/10/20 PHP
让Laravel API永远返回JSON格式响应的方法示例
2018/09/05 PHP
基于jquery实现的鼠标滑过按钮改变背景图片
2011/07/15 Javascript
javascript和jquery修改a标签的href属性
2013/12/16 Javascript
Javascript基础教程之函数对象和属性
2015/01/18 Javascript
如何改进javascript代码的性能
2015/04/02 Javascript
jQuery通过改变input的type属性实现密码显示隐藏切换功能
2017/02/08 Javascript
使用node.js搭建服务器
2017/05/20 Javascript
微信小程序三级联动地址选择器的实例代码
2017/07/12 Javascript
基于JavaScript表单脚本(详解)
2017/10/18 Javascript
原生JS+CSS实现炫酷重力模拟弹跳系统的登录页面
2017/11/01 Javascript
Vue条件循环判断+计算属性+绑定样式v-bind的实例
2018/09/18 Javascript
JavaScript中常用的简洁高级技巧总结
2019/03/10 Javascript
vue中通过使用$attrs实现组件之间的数据传递功能
2019/09/01 Javascript
js实现的在本地预览图片功能示例
2019/11/09 Javascript
[05:05]DOTA2亚洲邀请赛 战队出场仪式
2015/02/07 DOTA
[06:07]DOTA2-DPC中国联赛 正赛 Ehome vs VG 选手采访
2021/03/11 DOTA
wxpython中利用线程防止假死的实现方法
2014/08/11 Python
python中的reduce内建函数使用方法指南
2014/08/31 Python
跟老齐学Python之不要红头文件(1)
2014/09/28 Python
python中requests库session对象的妙用详解
2017/10/30 Python
django2.2 和 PyMySQL版本兼容问题
2020/02/17 Python
django 数据库 get_or_create函数返回值是tuple的问题
2020/05/15 Python
浅谈Python描述数据结构之KMP篇
2020/09/06 Python
如何利用python 读取配置文件
2021/01/06 Python
迟到检讨书900字
2014/01/14 职场文书
《威尼斯的小艇》教学反思
2014/02/17 职场文书
结对共建工作方案
2014/06/02 职场文书
防灾减灾日活动总结
2014/08/26 职场文书
薪资证明范本
2015/06/19 职场文书
2016春季幼儿园小班开学寄语
2015/12/03 职场文书
关于应聘教师的自荐信
2016/01/28 职场文书
JS的深浅复制详细
2021/10/16 Javascript
html中相对位置与绝对位置的具体使用
2022/05/15 HTML / CSS