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 相关文章推荐
netbeans7安装python插件的方法图解
Dec 24 Python
python 远程统计文件代码分享
May 14 Python
Python实现的文本编辑器功能示例
Jun 30 Python
利用scrapy将爬到的数据保存到mysql(防止重复)
Mar 31 Python
python画图系列之个性化显示x轴区段文字的实例
Dec 13 Python
windows中安装Python3.8.0的实现方法
Nov 19 Python
django实现模型字段动态choice的操作
Apr 01 Python
Pandas之read_csv()读取文件跳过报错行的解决
Apr 21 Python
Python3自定义json逐层解析器代码
May 11 Python
Python机器学习算法之决策树算法的实现与优缺点
May 13 Python
python 如何用terminal输入参数
May 25 Python
Python 文字识别
May 11 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实现的PDO异常处理操作分析
2018/12/27 PHP
php抽象类和接口知识点整理总结
2019/08/02 PHP
jquery 获取json数据实现代码
2009/04/27 Javascript
IE6/7/8中Option元素未设value时Select将获取空字符串
2011/04/07 Javascript
jquery图片放大镜功能的实例代码
2013/03/26 Javascript
js实现滑动触屏事件监听的方法
2015/05/05 Javascript
jQuery实现折叠、展开的菜单组效果代码
2015/09/16 Javascript
js选择器全面解析
2016/06/27 Javascript
jQuery插件Echarts实现的渐变色柱状图
2017/03/23 jQuery
js实现canvas图片与img图片的相互转换的示例
2017/08/31 Javascript
详谈DOM简介及节点、属性、查找节点的方法
2017/11/16 Javascript
zTree 树插件实现全国五级地区点击后加载的示例
2018/02/05 Javascript
详解浏览器缓存和webpack缓存配置
2018/07/06 Javascript
微信小程序五子棋游戏的棋盘,重置,对弈实现方法【附demo源码下载】
2019/02/20 Javascript
微信小程序获取地理位置及经纬度授权代码实例
2019/09/18 Javascript
linux系统使用python获取内存使用信息脚本分享
2014/01/15 Python
numpy.random.seed()的使用实例解析
2018/02/03 Python
python监控键盘输入实例代码
2018/02/09 Python
使用pyinstaller打包PyQt4程序遇到的问题及解决方法
2019/06/24 Python
详解python中index()、find()方法
2019/08/29 Python
Django模型中字段属性choice使用说明
2020/03/30 Python
在TensorFlow中实现矩阵维度扩展
2020/05/22 Python
python解释器安装教程的方法步骤
2020/07/02 Python
Python爬取微信小程序通用方法代码实例详解
2020/09/29 Python
python GUI计算器的实现
2020/10/09 Python
CSS3的resize属性使用初探
2015/09/27 HTML / CSS
canvas绘制表情包的示例代码
2018/07/09 HTML / CSS
戴尔美国官方折扣店:Dell Outlet
2018/02/13 全球购物
独特的礼品和创新的科技产品:The Grommet
2018/02/24 全球购物
不开辟用于交换数据的临时空间,如何完成字符串的逆序
2012/12/02 面试题
输入一行文字,找出其中大写字母、小写字母、空格、数字、及其他字符各有多少
2016/04/15 面试题
机械化及自动化毕业生的自我评价分享
2013/11/06 职场文书
英语专业毕业生自荐信范文
2013/12/31 职场文书
大学生违纪检讨书300字
2014/10/25 职场文书
医院中层管理人员培训心得体会
2016/01/11 职场文书
如何使用 resize 实现图片切换预览功能
2021/08/23 HTML / CSS