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 字典dict使用介绍
Nov 30 Python
一个基于flask的web应用诞生 记录用户账户登录状态(6)
Apr 11 Python
Python实现霍夫圆和椭圆变换代码详解
Jan 12 Python
Django中的CBV和FBV示例介绍
Feb 25 Python
Python可变参数*args和**kwargs用法实例小结
Apr 27 Python
在python中bool函数的取值方法
Nov 01 Python
python2.7使用plotly绘制本地散点图和折线图
Apr 02 Python
解决pycharm 工具栏Tool中找不到Run manager.py Task的问题
Jul 01 Python
详解将Python程序(.py)转换为Windows可执行文件(.exe)
Jul 19 Python
Python测试Kafka集群(pykafka)实例
Dec 23 Python
python 实现线程之间的通信示例
Feb 14 Python
使用python把xmind转换成excel测试用例的实现代码
Oct 12 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 list() 将数组中的值赋给变量的简单实例
2016/06/13 PHP
phpinfo无法显示的原因及解决办法
2019/02/15 PHP
php设计模式之建造器模式分析【星际争霸游戏案例】
2020/01/23 PHP
jquery select下拉框操作的一些说明
2010/04/02 Javascript
jQueryPad 实用的jQuery测试工具(支持IE,chrome,FF)
2010/05/22 Javascript
『jQuery』.html(),.text()和.val()的概述及使用
2013/04/22 Javascript
鼠标拖拽移动子窗体的JS实现
2014/02/25 Javascript
ECMAScript 6即将带给我们新的数组操作方法前瞻
2015/01/06 Javascript
jquery实现公告翻滚效果
2015/02/27 Javascript
Jquery网页内滑动缓冲导航的实现代码
2015/04/05 Javascript
node.js 使用ejs模板引擎时后缀换成.html
2015/04/22 Javascript
JS实现屏蔽shift,Ctrl,alt等功能键的方法
2015/06/01 Javascript
javascript创建函数的20种方式汇总
2015/06/23 Javascript
JavaScrip调试技巧之断点调试
2015/10/22 Javascript
JavaScript 计算笛卡尔积实例详解
2016/12/02 Javascript
ajax分页效果(bootstrap模态框)
2017/01/23 Javascript
微信小程序实时聊天WebSocket
2018/07/05 Javascript
vue resource发送请求的几种方式
2019/09/30 Javascript
VUE解决 v-html不能触发点击事件的问题
2019/10/28 Javascript
微信浏览器左上角返回按钮监听的实现
2020/03/04 Javascript
jQuery实现鼠标放置名字上显示详细内容气泡提示框效果的方法分析
2020/04/04 jQuery
vue created钩子函数与mounted钩子函数的用法区别
2020/11/05 Javascript
JS addEventListener()和attachEvent()方法实现注册事件
2021/01/11 Javascript
[01:05:30]VP vs TNC 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
Django自定义分页效果
2017/06/27 Python
python实现超市商品销售管理系统
2019/11/22 Python
详解字符串在Python内部是如何省内存的
2020/02/03 Python
台湾租车首选品牌:IWS艾维士租车
2019/05/03 全球购物
Cult Gaia官网:美国生活方式品牌
2019/08/16 全球购物
this关键字的作用
2016/01/30 面试题
市场营销策划方案
2014/06/11 职场文书
司法局群众路线教育实践活动整改措施思想汇报
2014/10/13 职场文书
教师正风肃纪剖析材料
2014/10/20 职场文书
升职感谢信
2015/01/22 职场文书
新农村建设指导员工作总结
2015/08/13 职场文书
中国古风插画师排行榜:夏达第一,第三是阴阳师姑获鸟皮肤创作者
2022/03/18 国漫