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的Flask框架中实现简单的登录功能的教程
Apr 20 Python
Python+Opencv识别两张相似图片
Mar 23 Python
完美解决Python2操作中文名文件乱码的问题
Jan 04 Python
virtualenv实现多个版本Python共存
Aug 21 Python
python中pika模块问题的深入探究
Oct 13 Python
利用Django模版生成树状结构实例代码
May 19 Python
python中从for循环延申到推导式的具体使用
Nov 29 Python
pytorch GAN生成对抗网络实例
Jan 10 Python
python实现贪吃蛇游戏源码
Mar 21 Python
Python日志处理模块logging用法解析
May 19 Python
Python flask路由间传递变量实例详解
Jun 03 Python
Python爬虫使用bs4方法实现数据解析
Aug 25 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防注入,表单提交值转义的实现详解
2013/06/10 PHP
与文件上传有关的php配置参数总结
2013/06/14 PHP
PHP可变函数的使用详解
2013/06/14 PHP
搭建Vim为自定义的PHP开发工具的一些技巧
2015/12/11 PHP
thinkphp5.1 文件引入路径问题及注意事项
2018/06/13 PHP
JS array 数组详解
2009/03/22 Javascript
JS动态添加option和删除option(附实例代码)
2013/04/01 Javascript
jquery 文本上下无缝滚动,鼠标放上去就停止 小例子
2013/06/05 Javascript
firefox浏览器不支持innerText的解决方法
2013/08/07 Javascript
javascript学习笔记--数字格式类型
2014/05/22 Javascript
JavaScript实现带播放列表的音乐播放器实例分享
2016/03/07 Javascript
浅析BootStrap模态框的使用(经典)
2016/04/29 Javascript
jQuery基于ajax方式实现用户名存在性检查功能示例
2017/02/10 Javascript
javascript 单例模式详解及简单实例
2017/02/14 Javascript
基于vue-cli vue-router搭建底部导航栏移动前端项目
2018/02/28 Javascript
JavaScript实现图片懒加载的方法分析
2018/07/05 Javascript
浅谈小程序 setData学问多
2019/02/20 Javascript
layui 富文本图片上传接口与普通按钮 文件上传接口的例子
2019/09/23 Javascript
详解如何在JS代码中消灭for循环
2019/12/11 Javascript
[06:44]2014DOTA2国际邀请赛-钥匙体育馆开战 开幕式振奋人心
2014/07/19 DOTA
python ElementTree 基本读操作示例
2009/04/09 Python
Python实现针对json中某个关键字段进行排序操作示例
2018/12/25 Python
django解决订单并发问题【推荐】
2019/07/31 Python
Python大数据之使用lxml库解析html网页文件示例
2019/11/16 Python
Pandas实现一列数据分隔为两列
2020/05/18 Python
Tensorflow中k.gradients()和tf.stop_gradient()用法说明
2020/06/10 Python
CSS3 伪类选择器 nth-child()说明
2010/07/10 HTML / CSS
加拿大女鞋品牌:ALDO
2016/11/13 全球购物
会计电算化实训报告
2014/11/04 职场文书
财务检查整改报告
2014/11/06 职场文书
2016继续教育研修日志
2015/11/13 职场文书
幼儿园语言教学反思
2016/02/23 职场文书
2016年小学教师师德承诺书
2016/03/25 职场文书
节约用水广告语60条
2019/11/14 职场文书
Vue项目打包、合并及压缩优化网页响应速度
2021/07/07 Vue.js
从结婚开始的恋爱故事。小说《我的美好婚事》TV动画化决定
2022/04/07 日漫