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 相关文章推荐
Pyhthon中使用compileall模块编译源文件为pyc文件
Apr 28 Python
深入浅析python继承问题
May 29 Python
Python爬取APP下载链接的实现方法
Sep 30 Python
Anaconda多环境多版本python配置操作方法
Sep 12 Python
Python中的单行、多行、中文注释方法
Jul 19 Python
python实现弹跳小球
May 13 Python
Django ORM多对多查询方法(自定义第三张表&ManyToManyField)
Aug 09 Python
python常见字符串处理函数与用法汇总
Oct 30 Python
Pyqt5自适应布局实例
Dec 13 Python
Python内置函数property()如何使用
Sep 01 Python
详解用selenium来下载小姐姐图片并保存
Jan 26 Python
python如何读取和存储dict()与.json格式文件
Jun 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实现文件下载更能介绍
2012/11/23 PHP
递归删除一个节点以及该节点下的所有节点示例
2014/03/19 PHP
Yii净化器CHtmlPurifier用法示例(过滤不良代码)
2016/07/15 PHP
php中this关键字用法分析
2016/12/07 PHP
dreamweaver 安装Jquery智能提示
2011/04/02 Javascript
JQuery实现简单验证码提示解决方案
2012/12/20 Javascript
JS仿hao123导航页面图片轮播效果
2016/09/01 Javascript
Javascript 实现简单计算器实例代码
2016/10/23 Javascript
JavaSctit 利用FileReader和滤镜上传图片预览功能
2017/09/05 Javascript
快速解决angularJS中用post方法时后台拿不到值的问题
2018/08/14 Javascript
koa-router源码学习小结
2018/09/07 Javascript
vue.js自定义组件directives的实例代码
2018/11/09 Javascript
webpack项目使用eslint建立代码规范实现
2019/05/16 Javascript
20道JS原理题助你面试一臂之力(必看)
2019/07/22 Javascript
基于jQuery实现挂号平台首页源码
2020/01/06 jQuery
vscode+gulp轻松开发小程序的完整步骤
2020/10/18 Javascript
JavaScript实现点击切换功能
2021/01/27 Javascript
Python入门篇之函数
2014/10/20 Python
对Python3 序列解包详解
2019/02/16 Python
python-图片流传输的思路及示例(url转换二维码)
2020/12/21 Python
Python操作Excel的学习笔记
2021/02/18 Python
CSS3系列之3D制作方法案例
2017/08/14 HTML / CSS
Delphi笔试题
2016/11/14 面试题
计算机专业毕业生的自我评价
2013/11/18 职场文书
运动会广播稿20字
2014/02/18 职场文书
退休教师欢送会主持词
2014/03/31 职场文书
先进班组事迹材料
2014/12/25 职场文书
行政人事专员岗位职责
2015/04/07 职场文书
承诺书应该怎么写?
2019/09/10 职场文书
MySQL单表千万级数据处理的思路分享
2021/06/05 MySQL
为什么在foreach循环中JAVA集合不能添加或删除元素
2021/06/11 Java/Android
CSS中妙用 drop-shadow 实现线条光影效果
2021/11/11 HTML / CSS
MySQL派生表联表查询实战过程
2022/03/20 MySQL
使用Ajax实现进度条的绘制
2022/04/07 Javascript
Nginx本地配置SSL访问的实例教程
2022/05/30 Servers
html,css,javascript是怎样变成页面的
2023/05/07 HTML / CSS