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生成指定尺寸缩略图的示例
May 07 Python
从零学Python之入门(四)运算
May 27 Python
python 默认参数问题的陷阱
Feb 29 Python
Python正则替换字符串函数re.sub用法示例
Jan 19 Python
python实现简单遗传算法
Mar 19 Python
详解Python学习之安装pandas
Apr 16 Python
python3.7将代码打包成exe程序并添加图标的方法
Oct 11 Python
python [:3] 实现提取数组中的数
Nov 27 Python
python带参数打包exe及调用方式
Dec 21 Python
Django-imagekit的使用详解
Jul 06 Python
用python发送微信消息
Dec 21 Python
Python使用plt.boxplot()函数绘制箱图、常用方法以及含义详解
Aug 14 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 fputcsv命令 写csv文件遇到的小问题(多维数组连接符)
2011/05/24 PHP
比file_get_contents稳定的curl_get_contents分享
2012/01/11 PHP
apache+codeigniter 通过.htcaccess做动态二级域名解析
2012/07/01 PHP
CodeIgniter采用config控制的多语言实现根据浏览器语言自动转换功能
2014/07/18 PHP
js 获取服务器控件值的代码
2010/03/05 Javascript
JQuery插件Style定制化方法的分析与比较
2012/05/03 Javascript
javascript编码的几个方法详细介绍
2013/01/06 Javascript
不用锚点也可以平滑滚动到页面的指定位置实现代码
2013/05/08 Javascript
jquery无法设置checkbox选中即没有变成选中状态
2014/03/27 Javascript
jquery 页眉单行信息滚动显示实现思路及代码
2014/06/26 Javascript
jQuery新的事件绑定机制on()示例应用
2014/07/18 Javascript
javascript实现base64 md5 sha1 密码加密
2015/09/09 Javascript
深入理解JavaScript中的对象复制(Object Clone)
2016/05/18 Javascript
jQuery 3.0 的 setter和getter 模式详解
2016/07/11 Javascript
微信小程序 网络API Websocket详解
2016/11/09 Javascript
JS中使用 after 伪类清除浮动实例
2017/03/01 Javascript
Angular.JS内置服务$http对数据库的增删改使用教程
2017/05/07 Javascript
jQuery导航条固定定位效果实例代码
2017/05/26 jQuery
随机生成10个不重复的0-100的数字(实例讲解)
2017/08/16 Javascript
使用 Vue 绑定单个或多个 Class 名的实例代码
2018/01/08 Javascript
vue 下列表侧滑操作实例代码详解
2018/07/24 Javascript
最适应的vue.js的form提交涉及多种插件【推荐】
2018/08/27 Javascript
浅谈vue中关于checkbox数据绑定v-model指令的个人理解
2018/11/14 Javascript
Element输入框带历史查询记录的实现示例
2019/01/15 Javascript
详解axios中封装使用、拦截特定请求、判断所有请求加载完毕)
2019/04/09 Javascript
使用vue脚手架(vue-cli)搭建一个项目详解
2019/05/09 Javascript
微信小程序Echarts图表组件使用方法详解
2019/06/25 Javascript
vue中使用GraphQL的实例代码
2019/11/04 Javascript
Python中的rjust()方法使用详解
2015/05/19 Python
python安装mysql-python简明笔记(ubuntu环境)
2016/06/25 Python
python快速建立超简单的web服务器的实现方法
2018/02/17 Python
美国演唱会和体育门票购买网站:Ticketnetwork
2018/10/19 全球购物
库房主管岗位职责
2013/12/31 职场文书
明星员工获奖感言
2014/08/14 职场文书
基层党支部整改方案
2014/10/25 职场文书
启迪人心的励志语录:脾气永远不要大于本事
2020/01/02 职场文书