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缩进区别分析
Feb 15 Python
使用python爬取B站千万级数据
Jun 08 Python
对numpy中数组转置的求解以及向量内积计算方法
Oct 31 Python
详解pyenv下使用python matplotlib模块的问题解决
Nov 29 Python
python中强大的format函数实例详解
Dec 05 Python
python实现栅栏加解密 支持密钥加密
Mar 20 Python
python文件选择对话框的操作方法
Jun 27 Python
Python Pandas中根据列的值选取多行数据
Jul 08 Python
django连接oracle时setting 配置方法
Aug 29 Python
Python彻底删除文件夹及其子文件方式
Dec 23 Python
django实现日志按日期分割
May 21 Python
python实现猜单词游戏
May 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下用rmdir实现删除目录的三种方法小结
2008/04/20 PHP
smarty模板引擎从配置文件中获取数据的方法
2015/01/22 PHP
php禁止某ip或ip地址段访问的方法
2015/02/25 PHP
让Laravel API永远返回JSON格式响应的方法示例
2018/09/05 PHP
Javascript 布尔型分析
2008/12/22 Javascript
JavaScript 自动完成脚本整理(33个)
2009/10/20 Javascript
到处都是jQuery选择器的年代 不了解它们的性能,行吗
2012/06/18 Javascript
JS、jquery实现几分钟前、几小时前、几天前等时间差显示效果的代码实例分享
2014/04/11 Javascript
js实现的早期滑动门菜单效果代码
2015/08/27 Javascript
JS DOM实现鼠标滑动图片效果
2020/09/17 Javascript
HTML中setCapture、releaseCapture 使用方法浅析
2016/09/25 Javascript
微信小程序学习(4)-系统配置app.json详解
2017/01/12 Javascript
Javascript中字符串和数字的操作方法整理
2017/01/22 Javascript
在javaScript中检测数据类型的几种方式小结
2017/03/04 Javascript
webpack构建react多页面应用详解
2017/09/15 Javascript
详细介绍RxJS在Angular中的应用
2017/09/23 Javascript
vue element-ui之怎么封装一个自己的组件的详解
2019/05/20 Javascript
如何解决vue在ios微信"复制链接"功能问题
2020/03/26 Javascript
python字符串的常用操作方法小结
2016/05/21 Python
Python cookbook(数据结构与算法)找到最大或最小的N个元素实现方法示例
2018/02/13 Python
python 读取鼠标点击坐标的实例
2018/12/29 Python
pandas抽取行列数据的几种方法
2020/12/13 Python
五分钟学会怎么用Pygame做一个简单的贪吃蛇
2021/01/06 Python
美国从事品牌鞋类零售的连锁店:Famous Footwear
2016/08/25 全球购物
奥地利时尚、美容、玩具和家居之家:Kastner & Öhler
2020/04/26 全球购物
建筑专业自我鉴定
2013/10/22 职场文书
小学新学期寄语
2014/04/02 职场文书
优秀驾驶员先进事迹材料
2014/05/04 职场文书
运动员口号
2014/06/09 职场文书
领导干部遵守党的政治纪律情况思想汇报
2014/09/14 职场文书
2015年校长新年寄语
2014/12/08 职场文书
街道社区活动报告
2015/02/05 职场文书
2015年艾滋病防治工作总结
2015/05/22 职场文书
分析mysql中一条SQL查询语句是如何执行的
2021/06/21 MySQL
Java基础之线程锁相关知识总结
2021/06/30 Java/Android
MySQL中一条SQL查询语句是如何执行的
2022/04/08 MySQL