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模块restful使用方法实例
Dec 10 Python
在Python的Django框架中使用通用视图的方法
Jul 21 Python
Python实现根据IP地址和子网掩码算出网段的方法
Jul 30 Python
使用Python保存网页上的图片或者保存页面为截图
Mar 05 Python
python3 发送任意文件邮件的实例
Jan 23 Python
python和shell监控linux服务器的详细代码
Jun 22 Python
django创建超级用户过程解析
Sep 18 Python
python数据库操作mysql:pymysql、sqlalchemy常见用法详解
Mar 30 Python
Python matplotlib图例放在外侧保存时显示不完整问题解决
Jul 28 Python
python -v 报错问题的解决方法
Sep 15 Python
Django mysqlclient安装和使用详解
Sep 17 Python
python如何读取.mtx文件
Apr 22 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对象类型判断
2008/08/27 PHP
Laravel 手动开关 Eloquent 修改器的操作方法
2019/12/30 PHP
JQuery一种取同级值的方式(比如你在GridView中)
2012/03/15 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(一)让静态人物动起来
2013/01/23 Javascript
jQuery 关于伪类选择符的使用说明
2013/04/24 Javascript
Js控制弹窗实现在任意分辨率下居中显示
2013/08/01 Javascript
jQuery制作简单柱状图实例
2015/01/28 Javascript
jQuery的css() 方法使用指南
2015/05/03 Javascript
js仿微信公众平台打标签功能
2017/04/08 Javascript
JS时间控制实现动态效果的实例讲解
2017/07/31 Javascript
react-native 完整实现登录功能的示例代码
2017/09/11 Javascript
Node.js中使用mongoose操作mongodb数据库的方法
2017/09/12 Javascript
一个有意思的鼠标点击文字特效jquery代码
2017/09/23 jQuery
微信小程序仿RadioGroup改变样式的处理方案
2018/07/13 Javascript
layui框架table 数据表格的方法级渲染详解
2018/08/19 Javascript
微信小程序--特定区域滚动到顶部时固定的方法
2019/04/28 Javascript
[40:03]Liquid vs Optic 2018国际邀请赛淘汰赛BO3 第一场 8.21
2018/08/22 DOTA
低版本中Python除法运算小技巧
2015/04/05 Python
python选择排序算法实例总结
2015/07/01 Python
Python装饰器入门学习教程(九步学习)
2016/01/28 Python
浅谈python标准库--functools.partial
2019/03/13 Python
详解python中的index函数用法
2019/08/06 Python
python轮询机制控制led实例
2020/05/03 Python
Python使用jupyter notebook查看ipynb文件过程解析
2020/06/02 Python
html5的canvas实现3d雪花飘舞效果
2013/12/27 HTML / CSS
全天然狗零食:Best Bully Sticks
2016/09/22 全球购物
ASOS英国官网:英国在线时装和化妆品零售商
2017/05/19 全球购物
大学生自我鉴定
2013/12/16 职场文书
给交警的表扬信
2014/01/12 职场文书
社区敬老月活动实施方案
2014/02/17 职场文书
应聘编辑自荐信范文
2014/03/12 职场文书
店长岗位职责
2015/02/11 职场文书
2015年员工工作总结范文
2015/04/08 职场文书
2015年幼儿园保育工作总结
2015/05/12 职场文书
员工旷工检讨书
2015/08/15 职场文书
MySql中的json_extract函数处理json字段详情
2022/06/05 MySQL