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远程登录代码
Apr 29 Python
linux环境下安装pyramid和新建项目的步骤
Nov 27 Python
利用python获取某年中每个月的第一天和最后一天
Dec 15 Python
浅谈使用Python变量时要避免的3个错误
Oct 30 Python
浅谈flask中的before_request与after_request
Jan 20 Python
python如何拆分含有多种分隔符的字符串
Mar 20 Python
Python实现的当前时间多加一天、一小时、一分钟操作示例
May 21 Python
Python绘制二维曲线的日常应用详解
Dec 04 Python
Django Session和Cookie分别实现记住用户登录状态操作
Jul 02 Python
python爬虫泛滥的解决方法详解
Nov 25 Python
Python脚本调试工具安装过程
Jan 11 Python
Pytorch数据读取之Dataset和DataLoader知识总结
May 23 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数据集构建JSON格式及新数组的方法
2012/11/07 PHP
javascript面向对象包装类Class封装类库剖析
2013/01/24 Javascript
JS对HTML标签select的获取、添加、删除操作
2013/10/17 Javascript
禁止IE用右键的JS代码
2013/12/30 Javascript
Asp.Net alert弹出提示信息的几种方法总结
2014/01/29 Javascript
nodejs中使用monk访问mongodb
2014/07/06 NodeJs
javascript ajax的5种状态介绍
2014/08/18 Javascript
jQuery使用之处理页面元素用法实例
2015/01/19 Javascript
nodejs基于WS模块实现WebSocket聊天功能的方法
2018/01/12 NodeJs
详解Vue中组件传值的多重实现方式
2019/08/16 Javascript
深入浅出vue图片路径的实现
2019/09/04 Javascript
[48:02]Ti4循环赛第三日 VG vs Liquid和NEWBEE vs DK
2014/07/12 DOTA
编写Python小程序来统计测试脚本的关键字
2016/03/12 Python
Android分包MultiDex策略详解
2017/10/30 Python
python 3利用Dlib 19.7实现摄像头人脸检测特征点标定
2018/02/26 Python
Python针对给定字符串求解所有子序列是否为回文序列的方法
2018/04/21 Python
Python闭包执行时值的传递方式实例分析
2018/06/04 Python
python 分离文件名和路径以及分离文件名和后缀的方法
2018/10/21 Python
用Python实现筛选文件脚本的方法
2018/10/27 Python
pytorch查看torch.Tensor和model是否在CUDA上的实例
2020/01/03 Python
Python实现ATM系统
2020/02/17 Python
python 提高开发效率的5个小技巧
2020/10/19 Python
css3 实现滚动条美化效果的实例代码
2021/01/06 HTML / CSS
巴西宠物店在线:Geração Pet
2017/05/31 全球购物
Charles&Keith美国官方网站:新加坡快时尚鞋类和配饰零售商
2019/11/27 全球购物
牵手50新加坡:专为黄金岁月的单身人士而设的交友网站
2020/08/16 全球购物
英国豪华家具和家居用品购物网站:Teddy Beau
2020/10/12 全球购物
斯洛伐克电子产品购物网站:DATART
2020/04/05 全球购物
超市促销实习自我鉴定
2013/09/23 职场文书
《再见了,亲人》教学反思
2014/02/26 职场文书
物流专业自荐信
2014/05/23 职场文书
爱牙日活动总结
2014/08/29 职场文书
2014年幼儿园保育工作总结
2014/12/02 职场文书
公司管理制度范本
2015/08/03 职场文书
Python关于OS文件目录处理的实例分享
2021/05/23 Python
Windows 11要来了?微软文档揭示Win11太阳谷 / Win10有两个不同版本
2021/11/21 数码科技