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 相关文章推荐
详解Django中的ifequal和ifnotequal标签使用
Jul 16 Python
python类的继承实例详解
Mar 30 Python
Windows下Anaconda的安装和简单使用方法
Jan 04 Python
pytorch 把MNIST数据集转换成图片和txt的方法
May 20 Python
Python(TensorFlow框架)实现手写数字识别系统的方法
May 29 Python
python re正则匹配网页中图片url地址的方法
Dec 20 Python
Python实现的服务器示例小结【单进程、多进程、多线程、非阻塞式】
May 23 Python
Python匿名函数/排序函数/过滤函数/映射函数/递归/二分法
Jun 05 Python
解决Django Static内容不能加载显示的问题
Jul 28 Python
基于Python生成个性二维码过程详解
Mar 05 Python
使用Django搭建网站实现商品分页功能
May 22 Python
python通配符之glob模块的使用详解
Apr 24 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
一些操作和快捷键的理解和讨论
2020/03/04 星际争霸
PHP语法速查表
2006/12/06 PHP
php之对抗Web扫描器的脚本技巧
2008/10/01 PHP
PHP计划任务之关闭浏览器后仍然继续执行的函数
2010/07/22 PHP
CURL状态码列表(详细)
2013/06/27 PHP
详解PHP中的Traits
2015/07/29 PHP
JS 密码强度验证(兼容IE,火狐,谷歌)
2010/03/15 Javascript
兼容所有浏览器的js复制插件Zero使用介绍
2014/03/19 Javascript
分享一个自己动手写的jQuery分页插件
2014/08/28 Javascript
基于jquery实现复选框全选,反选,全不选等功能
2015/10/16 Javascript
JavaScript中闭包的写法和作用详解
2016/06/29 Javascript
jQuery深拷贝Json对象简单示例
2016/07/06 Javascript
预防网页挂马的方法总结
2016/11/03 Javascript
javascript实现简单的可随机变色网页计算器示例
2016/12/30 Javascript
Node.js数据库操作之查询MySQL数据库(二)
2017/03/04 Javascript
nodejs个人博客开发第六步 数据分页
2017/04/12 NodeJs
vue 表单输入格式化中文输入法异常问题
2018/05/30 Javascript
layer弹窗在键盘按回车将反复刷新的实现方法
2019/09/25 Javascript
js实现贪吃蛇小游戏
2019/10/29 Javascript
TypeScript高级用法的知识点汇总
2019/12/17 Javascript
[00:09]DOTA2新版本PA至宝特效动作展示
2014/11/19 DOTA
Python正则表达式介绍
2012/08/06 Python
跟老齐学Python之关于循环的小伎俩
2014/10/02 Python
详解python中requirements.txt的一切
2017/03/03 Python
Python实现可获取网易页面所有文本信息的网易网络爬虫功能示例
2018/01/15 Python
对python list 遍历删除的正确方法详解
2018/06/29 Python
python使用xlrd和xlwt读写Excel文件的实例代码
2018/09/05 Python
python3+requests接口自动化session操作方法
2018/10/13 Python
python 列表推导式使用详解
2019/08/29 Python
Tensorflow中的降维函数tf.reduce_*使用总结
2020/04/20 Python
解决运行django程序出错问题 'str'object has no attribute'_meta'
2020/07/15 Python
深入理解css属性的选择对动画性能的影响
2016/04/20 HTML / CSS
中专生自荐信
2013/10/12 职场文书
应用数学自荐书范文
2013/11/24 职场文书
如何利用JavaScript实现二叉搜索树
2021/04/02 Javascript
go设置多个GOPATH的方式
2021/05/05 Golang