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跳出循环语句continue与break的区别
Aug 25 Python
安装Python的web.py框架并从hello world开始编程
Apr 25 Python
十条建议帮你提高Python编程效率
Feb 16 Python
python方法生成txt标签文件的实例代码
May 10 Python
python 读写excel文件操作示例【附源码下载】
Jun 19 Python
树莓派动作捕捉抓拍存储图像脚本
Jun 22 Python
解决python明明pip安装成功却找不到包的问题
Aug 28 Python
在主流系统之上安装Pygame的方法
May 20 Python
Python enumerate() 函数如何实现索引功能
Jun 29 Python
关于python tushare Tkinter构建的简单股票可视化查询系统(Beta v0.13)
Oct 19 Python
python 通过exifread读取照片信息
Dec 24 Python
pycharm 实现复制一行的快捷键
Jan 15 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个人网站架设连环讲(四)
2006/10/09 PHP
解决ajax+php中文乱码的方法详解
2013/06/09 PHP
Laravel 对某一列进行筛选然后求和sum()的例子
2019/10/10 PHP
在PHP中实现使用Guzzle执行POST和GET请求
2019/10/15 PHP
JS DOM 操作实现代码
2010/08/01 Javascript
40个新鲜出炉的jQuery 插件和免费教程[上]
2012/07/24 Javascript
JS判断字符串长度的5个方法(区分中文和英文)
2014/03/18 Javascript
jquery uploadify 在FF下无效的解决办法
2014/09/26 Javascript
JS实现响应鼠标点击动画渐变弹出层效果代码
2016/03/25 Javascript
javascript之Array 数组对象详解
2016/06/07 Javascript
AngularJS 实现弹性盒子布局的方法
2016/08/30 Javascript
js实现从左向右滑动式轮播图效果
2017/07/07 Javascript
JS插件clipboard.js实现一键复制粘贴功能
2020/12/04 Javascript
JavaScript实现拖拽功能
2020/02/11 Javascript
nodejs各种姿势断点调试的方法
2020/06/18 NodeJs
js实现QQ邮箱邮件拖拽删除功能
2020/08/27 Javascript
[07:38]2014DOTA2国际邀请赛 Newbee顺利挺进胜者组赛后专访
2014/07/15 DOTA
python采集博客中上传的QQ截图文件
2014/07/18 Python
对numpy的array和python中自带的list之间相互转化详解
2018/04/13 Python
10招!看骨灰级Pythoner玩转Python的方法
2019/04/15 Python
pyqt5使用按钮进行界面的跳转方法
2019/06/19 Python
5 个强大的HTML5 API 函数推荐
2014/11/19 HTML / CSS
FitFlop澳大利亚官网:英国符合人体工学的鞋类品牌
2017/06/05 全球购物
定制别致的瑜伽垫:Sugarmat
2019/06/21 全球购物
linux面试题参考答案(4)
2014/09/21 面试题
3.12植树节活动总结2014
2014/03/13 职场文书
《记金华的双龙洞》教学反思
2014/04/19 职场文书
安全生产大检查方案
2014/05/07 职场文书
学校2014重阳节活动策划方案
2014/09/16 职场文书
一年级语文下册复习计划
2015/01/17 职场文书
企业承诺书格式范文
2015/04/28 职场文书
创业计划书之游泳馆
2019/09/16 职场文书
详解Spring事件发布与监听机制
2021/06/30 Java/Android
基于Python实现射击小游戏的制作
2022/04/06 Python
Windows Server 修改远程桌面端口的实现
2022/06/25 Servers
python计算列表元素与乘积详情
2022/08/05 Python