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设计一个经典小游戏
May 15 Python
python实现单线程多任务非阻塞TCP服务端
Jun 13 Python
python使用pil库实现图片合成实例代码
Jan 20 Python
python模块smtplib学习
May 22 Python
python 保存float类型的小数的位数方法
Oct 17 Python
python url 参数修改方法
Dec 26 Python
Python Pandas 如何shuffle(打乱)数据
Jul 30 Python
基于Django的乐观锁与悲观锁解决订单并发问题详解
Jul 31 Python
Python中typing模块与类型注解的使用方法
Aug 05 Python
python模拟斗地主发牌
Apr 22 Python
Pytest之测试命名规则的使用
Apr 16 Python
python状态机transitions库详解
Jun 02 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
造就帕卡马拉的帕卡斯是怎么被发现的
2021/03/03 咖啡文化
谈谈新手如何学习PHP 默默经典版本
2009/08/04 PHP
php递归删除目录下的文件但保留的实例分享
2014/05/10 PHP
PHP调用C#开发的dll类库方法
2014/07/28 PHP
php删除一个路径下的所有文件夹和文件的方法
2018/02/07 PHP
PHP+redis实现的限制抢购防止商品超发功能详解
2019/09/19 PHP
子窗口、父窗口和Silverlight之间的相互调用
2010/08/16 Javascript
JS获取随机数函数可自定义最小值最大值
2014/05/08 Javascript
JavaScript将字符串转换为整数的方法
2015/04/14 Javascript
JavaScript中的replace()方法使用详解
2015/06/06 Javascript
用js编写的简单的计算器代码程序
2015/08/04 Javascript
js实现带圆角的两级导航菜单效果代码
2015/08/24 Javascript
js跨域请求数据的3种常用的方法
2015/12/01 Javascript
js采用concat和sort将N个数组拼接起来的方法
2016/01/21 Javascript
js 文字超出长度用省略号代替,鼠标悬停并以悬浮框显示实例
2016/12/06 Javascript
Web前端框架Angular4.0.0 正式版发布
2017/03/28 Javascript
JavaScript之DOM插入更新删除_动力节点Java学院整理
2017/07/03 Javascript
vue.js 中使用(...)运算符报错的解决方法
2018/08/09 Javascript
详解Vue用cmd创建项目
2019/02/12 Javascript
Element中的Cascader(级联列表)动态加载省\市\区数据的方法
2019/03/27 Javascript
[10:18]2018DOTA2国际邀请赛寻真——找回自信的TNCPredator
2018/08/13 DOTA
[42:32]Secret vs Optic 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python使用PIL模块生成随机验证码
2017/11/21 Python
全面分析Python的优点和缺点
2018/02/07 Python
对numpy中数组元素的统一赋值实例
2018/04/04 Python
Python实现正弦信号的时域波形和频谱图示例【基于matplotlib】
2018/05/04 Python
解决Keras的自定义lambda层去reshape张量时model保存出错问题
2020/07/01 Python
Python可以用来做什么
2020/11/23 Python
HTML5对手机页面长按会粘贴复制禁用的解决方法
2016/07/19 HTML / CSS
Paradigit比利时电脑卖场:购买笔记本、电脑、平板和外围设备
2016/11/28 全球购物
方太官方网上商城:销售方太抽油烟机、燃气灶、消毒柜等
2017/01/17 全球购物
DIY手工制作经营店创业计划书
2014/02/01 职场文书
大学新闻系求职信
2014/06/03 职场文书
法律进社区活动总结
2015/05/07 职场文书
Python 机器学习工具包SKlearn的安装与使用
2021/05/14 Python
javascript数组includes、reduce的基本使用
2021/07/02 Javascript