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基础入门之seed()方法的使用
May 15 Python
Python的自动化部署模块Fabric的安装及使用指南
Jan 19 Python
Python+Pika+RabbitMQ环境部署及实现工作队列的实例教程
Jun 29 Python
Python3 适合初学者学习的银行账户登录系统实例
Aug 08 Python
Python 通过打码平台实现验证码的实现
May 13 Python
pandas 时间格式转换的实现
Jul 06 Python
Python 多线程其他属性以及继承Thread类详解
Aug 28 Python
40个你可能不知道的Python技巧附代码
Jan 29 Python
Python Scrapy框架第一个入门程序示例
Feb 05 Python
pandas DataFrame运算的实现
Jun 14 Python
Python字符串格式化常用手段及注意事项
Jun 17 Python
python 利用Pyinstaller打包Web项目
Oct 23 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/10 PHP
php中时间轴开发(刚刚、5分钟前、昨天10:23等)
2011/10/03 PHP
PHP连接MySQL数据的操作要点
2015/03/20 PHP
php商品对比功能代码分享
2015/09/24 PHP
laravel如何开启跨域功能示例详解
2017/08/31 PHP
Laravel 加载第三方类库的方法
2018/04/20 PHP
PHP后台实现微信小程序登录
2018/08/03 PHP
获取DOM对象的几种扩展及简写
2006/10/09 Javascript
js document.write()使用介绍
2014/02/21 Javascript
javascript比较两个日期相差天数的方法
2015/07/23 Javascript
jQuery遍历DOM的父级元素、子级元素和同级元素的方法总结
2016/07/07 Javascript
JavaScript实现瀑布流图片效果
2017/06/30 Javascript
分享ES6的7个实用技巧
2018/01/18 Javascript
在 webpack 中使用 ECharts的实例详解
2018/02/05 Javascript
jquery的 filter()方法使用教程
2018/03/22 jQuery
Node.js利用console输出日志文件的方法示例
2018/04/27 Javascript
vue3.0 CLI - 2.5 - 了解组件的三维
2018/09/14 Javascript
mocha的时序规则讲解
2019/02/16 Javascript
JavaScript 变量,数据类型基础实例详解【变量、字符串、数组、对象等】
2020/01/04 Javascript
从0搭建vue-cli4脚手架
2020/06/17 Javascript
Element Backtop回到顶部的具体使用
2020/07/27 Javascript
在Vue 中获取下拉框的文本及选项值操作
2020/08/13 Javascript
Python实现正弦信号的时域波形和频谱图示例【基于matplotlib】
2018/05/04 Python
python检测主机的连通性并记录到文件的实例
2018/06/21 Python
解决tensorflow测试模型时NotFoundError错误的问题
2018/07/27 Python
ERLANG和PYTHON互通实现过程详解
2019/07/05 Python
python3 tcp的粘包现象和解决办法解析
2019/12/09 Python
Python+OpenCV+图片旋转并用原底色填充新四角的例子
2019/12/12 Python
Python字符串、列表、元组、字典、集合的补充实例详解
2019/12/20 Python
Python实现大数据收集至excel的思路详解
2020/01/03 Python
不到20行实现Python代码即可制作精美证件照
2020/04/24 Python
keras中的backend.clip用法
2020/05/22 Python
Django自带用户认证系统使用方法解析
2020/11/12 Python
CSS3盒子模型详解
2013/04/24 HTML / CSS
检察院对照“四风”认真查找问题落实整改措施
2014/09/26 职场文书
财务审计整改报告
2014/11/06 职场文书