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入门篇之条件、循环
Oct 17 Python
在arcgis使用python脚本进行字段计算时是如何解决中文问题的
Oct 18 Python
Python和JavaScript间代码转换的4个工具
Feb 22 Python
用Python进行简单图像识别(验证码)
Jan 19 Python
python批量替换页眉页脚实例代码
Jan 22 Python
Python切片操作深入详解
Jul 27 Python
Django使用paginator插件实现翻页功能的实例
Oct 24 Python
Python开发网站目录扫描器的实现
Feb 21 Python
Python3.6实现带有简单界面的有道翻译小程序
Apr 16 Python
python实现将视频按帧读取到自定义目录
Dec 10 Python
Python如何实现的二分查找算法
May 27 Python
python实现简单反弹球游戏
Apr 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开源开发框架ZendFramework使用中常见问题说明及解决方案
2014/06/12 PHP
php+ajax 实现输入读取数据库显示匹配信息
2015/10/08 PHP
php实现CSV文件导入和导出
2015/10/24 PHP
学习php设计模式 php实现工厂模式(factory)
2015/12/07 PHP
PHP房贷计算器实例代码,等额本息,等额本金
2017/04/01 PHP
php设计模式之策略模式实例分析【星际争霸游戏案例】
2020/03/26 PHP
jscript之List Excel Color Values
2007/06/13 Javascript
js判断变量是否空值的代码
2008/10/26 Javascript
jquery 插件之仿“卓越亚马逊”首页弹出菜单效果
2008/12/25 Javascript
NodeJS 模块开发及发布详解分享
2012/03/07 NodeJs
js限制文本框只能输入数字(正则表达式)
2012/07/15 Javascript
JS打开新窗口的2种方式
2013/04/18 Javascript
快速掌握Node.js之Window下配置NodeJs环境
2016/03/21 NodeJs
浅述Javascript的外部对象
2016/12/07 Javascript
jQuery Validate 校验多个相同name的方法
2017/05/18 jQuery
JQuery用$.ajax或$.getJSON跨域获取JSON数据的实现代码
2017/09/23 jQuery
Vue+SpringBoot开发V部落博客管理平台
2017/12/27 Javascript
vue实现搜索过滤效果
2019/05/28 Javascript
jQuery实现简单飞机大战
2020/07/05 jQuery
JavaScript实现多球运动效果
2020/09/07 Javascript
Python 命令行参数sys.argv
2008/09/06 Python
Python的自动化部署模块Fabric的安装及使用指南
2016/01/19 Python
python实现实时监控文件的方法
2016/08/26 Python
用python的requests第三方模块抓取王者荣耀所有英雄的皮肤实例
2017/12/14 Python
Python中类的创建和实例化操作示例
2019/02/27 Python
NumPy 数组使用大全
2019/04/25 Python
django 多对多表的创建和插入代码实现
2019/09/09 Python
Python爬虫程序架构和运行流程原理解析
2020/03/09 Python
Pandas将列表(List)转换为数据框(Dataframe)
2020/04/24 Python
TripAdvisor西班牙官方网站:全球领先的旅游网站
2018/01/10 全球购物
交通事故和解协议书
2015/01/27 职场文书
文艺晚会开场白
2015/05/29 职场文书
2015年乡镇组织委员工作总结
2015/10/23 职场文书
个人工作总结(管理人员)范文
2019/08/13 职场文书
Python list去重且保持原顺序不变的方法
2021/04/03 Python
vue @ ~ 相对路径 路径别名设置方式
2022/06/05 Vue.js