matplotlib animation的官方文档:

http://matplotlib.org/api/animation_api.html

接下来完成一个实时获取cpu数值,并绘图的功能。

1.动画的骨架

初始化空数据,初始化图形大小和背景颜色,插入子图(三个数字分别表示几行几列第几个位置),初始化图形(数据为空)。

xdata = []
ydata = []
fig = plt.figure(figsize=(18, 8), facecolor="white")
ax = fig.add_subplot(111)
line, = ax.plot(xdata, ydata, color="red")

2.更新数据

1.更新x,y。

2.更新坐x/y轴。

参数data为迭代从FuncAnimation方法frames参数传进来的数值,这样就更新了下x,y,对图形的x/y轴大小做相应的重设,再把数据通过set_data传进图形,最后再把上述的变化通过draw()方法绘制到界面上,返回line给FuncAnimation方法。。

def update(data):
x, y = data
xdata.append(x)
ydata.append(y)
xmin, xmax = ax.get_xlim()
if x >= xmax:
ax.set_xlim(0, xmax+10)
ax.figure.canvas.draw()
line.set_data(xdata, ydata)
return line,

3.获取数据

获取电脑cpu数值,并对x坐标累加。

def data_gen(): #设置xy变量
x = -1
while True:
y = psutil.cpu_percent(interval=1) #获取cpu数值,1s获取一次。
x += 1
yield x,y

4.FuncAnimation方法

FuncAnimation方法主要是与update函数做交互,将frames参数对应的数据逐条传进update函数,再由update函数返回的图形覆盖FuncAnimation原先的图形,fig参数即为一开始对应的参数,interval为每次更新的时间间隔,还有其他一些参数如blit=True控制图形精细,当界面较多子图时,为True可以使得看起来不会太卡,关键是frames参数,
可为迭代数,可为函数,也可为空,

如果你指定一个大小,其迭代则从0开始到最后该数值停止。

如果你指定一个函数,在函数循环里不断获取数据,则可以无限循环下去。

ani = animation.FuncAnimation(fig, run, data_gen, blit=False, interval=1,
repeat=False, init_func=init)
plt.show()

完整代码:

#!/usr/bin/env python
#-*-coding:utf-8 -*-
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import psutil
def data_gen(): #设置xy变量
x = -1
while True:
y = psutil.cpu_percent(interval=1) #获取cpu数值,1s获取一次。
x += 1
yield x,y
def init():
ax.set_xlim(0, 10)
ax.set_ylim(0, 100)
del xdata[:]
del ydata[:]
line.set_data(xdata, ydata)
return line, xdata = []
ydata = []
fig = plt.figure(figsize=(18, 8), facecolor="white")
ax = fig.add_subplot(111)
line, = ax.plot(xdata, ydata, color="red") # update the data
def update(data):
x, y = data
xdata.append(x)
ydata.append(y)
xmin, xmax = ax.get_xlim()
if x >= xmax:
ax.set_xlim(0, xmax+10)
ax.figure.canvas.draw()
line.set_data(xdata, ydata)
return line, ani = animation.FuncAnimation(fig,update,data_gen, blit=False, interval=1,
repeat=False, init_func=init)
plt.show()

python matplotlib动态绘图的更多相关文章

  1. 转:使用 python Matplotlib 库 绘图 及 相关问题

     使用 python Matplotlib 库绘图      转:http://blog.csdn.net/daniel_ustc/article/details/9714163 Matplotlib ...

  2. matplotlib动态绘图

    目录 package Process 解决中文乱码问题 simple_plot() scatter_plot() three_dimension_scatter() Jupyter notebook ...

  3. (转)使用 python Matplotlib 库绘图

    运行一个简单的程序例子: import matplotlib.pyplot as plt plt.plot([1,2,3]) plt.ylabel('some numbers') plt.show() ...

  4. Python——matplotlib基础绘图函数示例

    1. 2.饼图 (1) import matplotlib.pyplot as plt labels='frogs','hogs','dogs','logs'% sizes=[15,30,45,10] ...

  5. 【Python开发】使用python中的matplotlib进行绘图分析数据

    matplotlib 是python最著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地进行制图.而且也可以方便地将它作为绘图控件,嵌入GUI应用程序中. 它的文档相当完备, ...

  6. 安装python Matplotlib 库

    转:使用 python Matplotlib 库 绘图 及 相关问题  使用 python Matplotlib 库绘图      转:http://blog.csdn.net/daniel_ustc ...

  7. 使用Python matplotlib做动态曲线

    今天看到“Python实时监控CPU使用率”的教程: https://www.w3cschool.cn/python3/python3-ja3d2z2g.html 自己也学习如何使用Python ma ...

  8. python强大的绘图模块matplotlib示例讲解

    Matplotlib 是 Python 的绘图库.作为程序员,经常需要进行绘图,在我自己的工作中,如果需要绘图,一般都是将数据导入到excel中,然后通过excel生成图表,这样操作起来还是比较繁琐的 ...

  9. 吴裕雄--天生自然python学习笔记:Matplotlib 基本绘图

    使用 Matplotlib 组件绘图时,经常要与 Numpy 组件搭配使用 . 使用 Matplotlib 绘图首先要导入 Matplotlib 组件 , 由于大部分绘图功能是在 matplotlib ...

随机推荐

  1. flutter编译ios的时候需要进行的操作:

    pod install  执行这个命令,安装依赖

  2. trylock方法

    synchronized 是不占用到手不罢休的,会一直试图占用下去. 与 synchronized 的钻牛角尖不一样,Lock接口还提供了一个trylock方法.trylock会在指定时间范围内试图占 ...

  3. SpringCloud学习成长之十三 断路器聚合监控

    上一篇文章讲述了如何利用Hystrix Dashboard去监控断路器的Hystrix command.当我们有很多个服务的时候,这就需要聚合所以服务的Hystrix Dashboard的数据了.这就 ...

  4. 通过Httpclient工具类,实现接口请求

    package luckyweb.seagull.util; import org.apache.http.NameValuePair; import org.apache.http.client.e ...

  5. Sybase数据库网页数据维护工具

    Sybase是优秀的数据库产品,在银行,政务等行业广泛使用, 现在TreeSoft数据库管理系统已支持Sybase了,直接在浏览器中就可以操作查看Sybase数据了,十分方便.        Tree ...

  6. 给.Net Core添加Swagger实现接口文档自动生成

    1.添加Nuget相关引用 Swashbuckle.AspNetCore

  7. vue等单页面应用及其优缺点

    优点: Vue 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件,核心是一个响应的数据绑定系统.MVVM.数据驱动.组件化.轻量.简洁.高效.快速.模块友好. 缺点: 不支持低版本 ...

  8. Direct2D 学习笔记 前言

    Direct2D模板程序网址:https://docs.microsoft.com/zh-cn/windows/win32/direct2d/direct2d-quickstart DirectX S ...

  9. JRE和JDK的作用和区别

    JVM(Java  Virtual Machine)是一个虚拟的用于执行bytecode字节码的“虚拟计算机”JRE(Java   Runtime  Environment):Java 虚拟机.库函数 ...

  10. [转帖]Greenplum :基于 PostgreSQL 的分布式数据库内核揭秘 (上篇)

    Greenplum :基于 PostgreSQL 的分布式数据库内核揭秘 (上篇) https://www.infoq.cn/article/3IJ7L8HVR2MXhqaqI2RA 学长的文章.. ...