python之matplotlib学习绘制动态更新图实例代码


Posted in Python onJanuary 23, 2018

简介

通过定时器Timer触发事件,定时更新绘图,可以形成动态更新图片。下面的实例是学习《matplotlib for python developers》一文的笔记。

实现

实现代码及简单介绍

通过self.user = self.user[1:] + [temp],每次删除列表的第一元素,在其尾部添加新的元素。这样完成user数据的动态更新。其他详细的解释见文中的注释部分。

#-*-coding:utf-8-*- 
import wx 
from matplotlib.figure import Figure 
import matplotlib.font_manager as font_manager 
import numpy as np 
from matplotlib.backends.backend_wxagg import \ 
 FigureCanvasWxAgg as FigureCanvas 
# wxWidgets object ID for the timer 
TIMER_ID = wx.NewId() 
# number of data points 
POINTS = 300 
 
class PlotFigure(wx.Frame): 
  """Matplotlib wxFrame with animation effect""" 
  def __init__(self): 
    wx.Frame.__init__(self, None, wx.ID_ANY, title="CPU Usage Monitor", size=(600, 400)) 
    # Matplotlib Figure 
    self.fig = Figure((6, 4), 100) 
    # bind the Figure to the backend specific canvas 
    self.canvas = FigureCanvas(self, wx.ID_ANY, self.fig) 
    # add a subplot 
    self.ax = self.fig.add_subplot(111) 
    # limit the X and Y axes dimensions 
    self.ax.set_ylim([0, 100]) 
    self.ax.set_xlim([0, POINTS]) 
     
    self.ax.set_autoscale_on(False) 
    self.ax.set_xticks([]) 
    # we want a tick every 10 point on Y (101 is to have 10 
    self.ax.set_yticks(range(0, 101, 10)) 
    # disable autoscale, since we don't want the Axes to ad 
    # draw a grid (it will be only for Y) 
    self.ax.grid(True) 
    # generates first "empty" plots 
    self.user = [None] * POINTS 
    self.l_user,=self.ax.plot(range(POINTS),self.user,label='User %') 
 
    # add the legend 
    self.ax.legend(loc='upper center', 
              ncol=4, 
              prop=font_manager.FontProperties(size=10)) 
    # force a draw on the canvas() 
    # trick to show the grid and the legend 
    self.canvas.draw() 
    # save the clean background - everything but the line 
    # is drawn and saved in the pixel buffer background 
    self.bg = self.canvas.copy_from_bbox(self.ax.bbox) 
    # bind events coming from timer with id = TIMER_ID 
    # to the onTimer callback function 
    wx.EVT_TIMER(self, TIMER_ID, self.onTimer) 
 
  def onTimer(self, evt): 
    """callback function for timer events""" 
    # restore the clean background, saved at the beginning 
    self.canvas.restore_region(self.bg) 
        # update the data 
    temp =np.random.randint(10,80) 
    self.user = self.user[1:] + [temp] 
    # update the plot 
    self.l_user.set_ydata(self.user) 
    # just draw the "animated" objects 
    self.ax.draw_artist(self.l_user)# It is used to efficiently update Axes data (axis ticks, labels, etc are not updated) 
    self.canvas.blit(self.ax.bbox) 
if __name__ == '__main__': 
  app = wx.PySimpleApp() 
  frame = PlotFigure() 
  t = wx.Timer(frame, TIMER_ID) 
  t.Start(50) 
  frame.Show() 
  app.MainLoop()

运行结果如下所示:

python之matplotlib学习绘制动态更新图实例代码

疑问

但程序运行在关闭的时候会出现应用程序错误,不知道什么问题。python不是有垃圾回收机制吗,难道是内存泄露?

猜测的原因可能是在关闭的时候正在绘图故导致应用程序出错。通过添加Frame的析构函数,停止更新则不会出现问题。

def __del__( self ): 
  t.Stop()

总结

以上就是本文关于python之matplotlib学习绘制动态更新图实例代码的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

Python 相关文章推荐
python模块之StringIO使用示例
Apr 08 Python
Python实现短网址ShortUrl的Hash运算实例讲解
Aug 10 Python
Python基于pygame实现的font游戏字体(附源码)
Nov 11 Python
Python编码爬坑指南(必看)
Jun 10 Python
Scrapy基于selenium结合爬取淘宝的实例讲解
Jun 13 Python
Flask Web开发入门之文件上传(八)
Aug 17 Python
Django ManyToManyField 跨越中间表查询的方法
Dec 18 Python
Python面向对象编程基础实例分析
Jan 17 Python
python数据库编程 ODBC方式实现通讯录
Mar 27 Python
Python判断远程服务器上Excel文件是否被人打开的方法
Jul 13 Python
Python钉钉报警及Zabbix集成钉钉报警的示例代码
Aug 17 Python
matplotlib设置颜色、标记、线条,让你的图像更加丰富(推荐)
Sep 25 Python
彻底搞懂Python字符编码
Jan 23 #Python
Python实现PS滤镜的万花筒效果示例
Jan 23 #Python
python处理csv数据动态显示曲线实例代码
Jan 23 #Python
Python+matplotlib实现华丽的文本框演示代码
Jan 22 #Python
CentOS7.3编译安装Python3.6.2的方法
Jan 22 #Python
Python OpenCV实现图片上输出中文
Jan 22 #Python
python批量替换页眉页脚实例代码
Jan 22 #Python
You might like
QQ登录 PHP OAuth示例代码
2011/07/20 PHP
php获取文件类型和文件信息的方法
2015/07/10 PHP
symfony2.4的twig中date用法分析
2016/03/18 PHP
Js的MessageBox
2006/12/03 Javascript
javascript 哈希表(hashtable)的简单实现
2010/01/20 Javascript
javascript 45种缓动效果 非常酷
2011/06/28 Javascript
js格式化货币数据实现代码
2013/09/04 Javascript
JavaScript判断变量是否为undefined的两种写法区别
2013/12/04 Javascript
jquery向上向下取整适合分页查询
2014/09/06 Javascript
JavaScript基础重点(必看)
2016/07/09 Javascript
js遍历json对象所有key及根据动态key获取值的方法(必看)
2017/03/09 Javascript
基于Bootstrap框架实现图片切换
2017/03/10 Javascript
利用ES6实现单例模式及其应用详解
2017/12/09 Javascript
vue进行图片的预加载watch用法实例讲解
2018/02/07 Javascript
ionic3双击返回退出应用的方法
2019/09/17 Javascript
微信小程序实现锚点跳转
2020/11/23 Javascript
Python新手在作用域方面经常容易碰到的问题
2015/04/03 Python
Python日志模块logging简介
2015/04/13 Python
python bottle框架支持jquery ajax的RESTful风格的PUT和DELETE方法
2017/05/24 Python
django admin 后台实现三级联动的示例代码
2018/06/22 Python
对Python3.6 IDLE常用快捷键介绍
2018/07/16 Python
Selenium(Python web测试工具)基本用法详解
2018/08/10 Python
安装好Pycharm后如何配置Python解释器简易教程
2019/06/28 Python
12个步骤教你理解Python装饰器
2019/07/01 Python
详解Python模块化编程与装饰器
2021/01/16 Python
用html5的canvas和JavaScript创建一个绘图程序的简单实例
2016/07/06 HTML / CSS
纽约州一群才华横溢的金匠制作而成:Hearth Jewelry
2019/03/22 全球购物
写一个方法1000的阶乘
2012/11/21 面试题
医学专业毕业生个人的求职信
2013/12/04 职场文书
生物科学专业个人求职信范文
2013/12/07 职场文书
质量月活动策划方案
2014/03/10 职场文书
捐款活动总结
2014/08/27 职场文书
毕业生个人总结
2015/02/28 职场文书
护士年终工作总结不会写?各科护士模板总结
2020/01/02 职场文书
python文本处理的方案(结巴分词并去除符号)
2021/05/26 Python
怎么禁用Win11输入法 最新Win11输入法关闭教程
2022/08/05 数码科技