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 24 Python
Python 3.6 读取并操作文件内容的实例
Apr 23 Python
python实现泊松图像融合
Jul 26 Python
python中scikit-learn机器代码实例
Aug 05 Python
Python使用try except处理程序异常的三种常用方法分析
Sep 05 Python
对python 匹配字符串开头和结尾的方法详解
Oct 27 Python
PyQt5实现简单数据标注工具
Mar 18 Python
Python使用修饰器进行异常日志记录操作示例
Mar 19 Python
深入了解和应用Python 装饰器 @decorator
Apr 02 Python
Python实现打砖块小游戏代码实例
May 18 Python
Python 识别12306图片验证码物品的实现示例
Jan 20 Python
python输出第n个默尼森数的实现示例
Mar 08 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操作excel文件 基于phpexcel
2010/07/02 PHP
通过table标签,PHP输出EXCEL的实现方法
2013/07/24 PHP
PHP用身份证号获取星座和生肖的方法
2013/11/07 PHP
VB中的RasEnumConnections函数返回632错误解决方法
2014/07/29 PHP
PHP实现利用MySQL保存session的方法
2014/08/23 PHP
thinkPHP连接sqlite3数据库的实现方法(附Thinkphp代码生成器下载)
2016/05/27 PHP
分析PHP中单双引号的误区和双引号小隐患
2016/07/19 PHP
js构造函数、索引数组和属性的实现方式和使用
2014/11/16 Javascript
js实现仿百度汽车频道选择汽车图片展示实例
2015/05/06 Javascript
javascript实现淡蓝色的鼠标拖动选择框实例
2015/05/09 Javascript
JS基于VML技术实现的五角星礼花效果代码
2015/10/26 Javascript
jQuery组件easyui基本布局实现代码
2016/08/25 Javascript
JQuery实现定时刷新功能代码
2017/05/09 jQuery
Vue和React组件之间的传值方式详解
2019/01/31 Javascript
如何自定义微信小程序tabbar上边框的颜色
2019/07/09 Javascript
详解webpack引用jquery(第三方模块)的三种办法
2019/08/21 jQuery
Vue中axios拦截器如何单独配置token
2019/12/27 Javascript
Angular+ionic实现折叠展开效果的示例代码
2020/07/29 Javascript
详解实现vue的数据响应式原理
2021/01/20 Vue.js
pymongo实现控制mongodb中数字字段做加法的方法
2015/03/26 Python
Python实现生成随机数据插入mysql数据库的方法
2017/12/25 Python
python多行字符串拼接使用小括号的方法
2020/03/19 Python
python单向链表的基本实现与使用方法【定义、遍历、添加、删除、查找等】
2019/10/24 Python
python FTP批量下载/删除/上传实例
2019/12/22 Python
Python使用Chrome插件实现爬虫过程图解
2020/06/09 Python
如何对python的字典进行排序
2020/06/19 Python
利用Python函数实现一个万历表完整示例
2021/01/23 Python
李维斯牛仔裤英国官方网站:Levi’s英国
2019/10/10 全球购物
大学班级文化建设方案
2014/05/06 职场文书
员工试用期自我评价
2014/09/18 职场文书
保研推荐信范文
2015/03/25 职场文书
女方家长婚礼答谢词
2015/09/29 职场文书
2016春季校长开学典礼致辞
2015/11/26 职场文书
建立共青团委员会的请示
2019/04/02 职场文书
JavaScript的Set数据结构详解
2022/02/18 Javascript
Spring事务管理下synchronized锁失效问题的解决方法
2022/03/31 Java/Android