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验证企业工商注册码
Oct 25 Python
python实现猜数字小游戏
Mar 24 Python
python实现泊松图像融合
Jul 26 Python
python使用Turtle库绘制动态钟表
Nov 19 Python
python使用百度文字识别功能方法详解
Jul 23 Python
Python编程学习之如何判断3个数的大小
Aug 07 Python
numpy.ndarray 实现对特定行或列取值
Dec 05 Python
python3 字符串知识点学习笔记
Feb 08 Python
django 读取图片到页面实例
Mar 27 Python
python属于跨平台语言码
Jun 09 Python
Python3.8.2安装包及安装教程图文详解(附安装包)
Nov 28 Python
手把手教你用Django执行原生SQL的方法
Feb 18 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
php+oracle 分页类
2006/10/09 PHP
discuz程序的PHP加密函数原理分析
2011/08/05 PHP
js限制checkbox勾选的个数以及php获取多个checkbbox的方法深入解析
2013/07/18 PHP
Yii2超好用的日期和时间组件(值得收藏)
2016/05/05 PHP
Thinkphp5.0框架视图view的循环标签用法示例
2019/10/12 PHP
jQuery语法高亮插件支持各种程序源代码语法着色加亮
2013/04/27 Javascript
JQuery实现倒计时按钮具体方法
2013/11/14 Javascript
jquery实现网页的页面平滑滚动效果代码
2015/11/02 Javascript
JavaScript小技巧整理
2015/12/30 Javascript
Angularjs 实现分页功能及示例代码
2016/09/14 Javascript
在javaScript中检测数据类型的几种方式小结
2017/03/04 Javascript
jQuery+CSS3实现点赞功能
2017/03/13 Javascript
Vue.js 插件开发详解
2017/03/29 Javascript
详解基于Vue2.0实现的移动端弹窗(Alert, Confirm, Toast)组件
2018/08/02 Javascript
详解axios中封装使用、拦截特定请求、判断所有请求加载完毕)
2019/04/09 Javascript
详解VUE调用本地json的使用方法
2019/05/15 Javascript
微信小程序实现上拉加载功能
2019/11/20 Javascript
vue 中的动态传参和query传参操作
2020/11/09 Javascript
[02:32]DOTA2亚洲邀请赛 VG战队巡礼
2015/02/03 DOTA
python装饰器与递归算法详解
2016/02/18 Python
python实现二维码扫码自动登录淘宝
2016/12/27 Python
python简单的三元一次方程求解实例
2020/04/02 Python
Pytorch环境搭建与基本语法
2020/06/03 Python
解决运行django程序出错问题 'str'object has no attribute'_meta'
2020/07/15 Python
Python执行时间的几种计算方法
2020/07/31 Python
python3 os进行嵌套操作的实例讲解
2020/11/19 Python
windeln官方海外旗舰店:德淘超人气母婴超市
2017/12/15 全球购物
施华洛世奇韩国官网:SWAROVSKI韩国
2018/06/05 全球购物
Canal官网:巴西女性时尚品牌
2019/10/16 全球购物
法雷奥SQA(electric)面试问题
2016/01/23 面试题
市场营销方案范文
2014/03/11 职场文书
社会治安综合治理责任书
2015/01/29 职场文书
2015年度优秀员工自荐书
2015/03/06 职场文书
民间借贷借条如何写
2015/05/26 职场文书
2015年秋季运动会前导词
2015/07/20 职场文书
Go语言空白表示符_的实例用法
2021/07/04 Golang