python之matplotlib学习绘制动态更新图实例代码

 更新时间:2018年01月23日 09:12:22   作者:bigxu  
这篇文章主要介绍了python之matplotlib学习绘制动态更新图实例代码,文中涉及具体实现代码,演示效果及运行时出现的问题分析等相关内容,小编觉得还是挺不错的,这里分享给大家,需要的朋友可以参考下

简介

通过定时器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不是有垃圾回收机制吗,难道是内存泄露?

猜测的原因可能是在关闭的时候正在绘图故导致应用程序出错。通过添加Frame的析构函数,停止更新则不会出现问题。

def __del__( self ): 
  t.Stop() 

总结

以上就是本文关于python之matplotlib学习绘制动态更新图实例代码的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

相关文章

  • Python实现的圆形绘制(画圆)示例

    Python实现的圆形绘制(画圆)示例

    这篇文章主要介绍了Python实现的圆形绘制(画圆),结合实例形式分析了Python基于numpy与matplotlib模块的数学运算及图形绘制相关操作技巧,需要的朋友可以参考下
    2018-01-01
  • Python一行命令部署http ftp服务

    Python一行命令部署http ftp服务

    这篇文章主要介绍了Python一行命令部署http ftp服务实现过程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01
  • 基于python生成英文版词云图代码实例

    基于python生成英文版词云图代码实例

    这篇文章主要介绍了基于python生成英文版词云图代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • 深入解析Python中filter函数的使用

    深入解析Python中filter函数的使用

    在Python中,filter函数是一种内置的高阶函数,它能够接受一个函数和一个迭代器,然后返回一个新的迭代器,本文主要来介绍一下Python中filter函数的具体用法,需要的可以参考一下
    2023-07-07
  • Python3 列表list合并的4种方法

    Python3 列表list合并的4种方法

    这篇文章主要介绍了Python3 列表list合并的4种方法,需要的朋友可以参考下
    2021-04-04
  • Python基于tkinter canvas实现图片裁剪功能

    Python基于tkinter canvas实现图片裁剪功能

    这篇文章主要介绍了Python基于tkinter canvas实现图片裁剪功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • Python使用机器学习模型实现温度预测详解

    Python使用机器学习模型实现温度预测详解

    使用 Python 可以使用机器学习模型进行温度预测。常用的模型有回归分析、随机森林等。本文就来和大家来了具体实现方法,希望对大家有所帮助
    2023-01-01
  • 基于python中的TCP及UDP(详解)

    基于python中的TCP及UDP(详解)

    下面小编就为大家带来一篇基于python中的TCP及UDP(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望对大家有所帮助
    2017-11-11
  • 4种Python基于字段的不使用元类的ORM实现方法总结

    4种Python基于字段的不使用元类的ORM实现方法总结

    在 Python 中,ORM(Object-Relational Mapping)是一种将对象和数据库之间的映射关系进行转换的技术,本文为大家整理了4种不使用元类的简单ORM实现方式,需要的可以参考下
    2023-12-12
  • Python实现快速计算词频功能示例

    Python实现快速计算词频功能示例

    这篇文章主要介绍了Python实现快速计算词频功能,结合实例形式总结分析了Python使用nltk库进行词频计算功能的相关操作技巧,需要的朋友可以参考下
    2018-06-06

最新评论