python matplotlib动态绘图
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动态绘图的更多相关文章
- 转:使用 python Matplotlib 库 绘图 及 相关问题
使用 python Matplotlib 库绘图 转:http://blog.csdn.net/daniel_ustc/article/details/9714163 Matplotlib ...
- matplotlib动态绘图
目录 package Process 解决中文乱码问题 simple_plot() scatter_plot() three_dimension_scatter() Jupyter notebook ...
- (转)使用 python Matplotlib 库绘图
运行一个简单的程序例子: import matplotlib.pyplot as plt plt.plot([1,2,3]) plt.ylabel('some numbers') plt.show() ...
- Python——matplotlib基础绘图函数示例
1. 2.饼图 (1) import matplotlib.pyplot as plt labels='frogs','hogs','dogs','logs'% sizes=[15,30,45,10] ...
- 【Python开发】使用python中的matplotlib进行绘图分析数据
matplotlib 是python最著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地进行制图.而且也可以方便地将它作为绘图控件,嵌入GUI应用程序中. 它的文档相当完备, ...
- 安装python Matplotlib 库
转:使用 python Matplotlib 库 绘图 及 相关问题 使用 python Matplotlib 库绘图 转:http://blog.csdn.net/daniel_ustc ...
- 使用Python matplotlib做动态曲线
今天看到“Python实时监控CPU使用率”的教程: https://www.w3cschool.cn/python3/python3-ja3d2z2g.html 自己也学习如何使用Python ma ...
- python强大的绘图模块matplotlib示例讲解
Matplotlib 是 Python 的绘图库.作为程序员,经常需要进行绘图,在我自己的工作中,如果需要绘图,一般都是将数据导入到excel中,然后通过excel生成图表,这样操作起来还是比较繁琐的 ...
- 吴裕雄--天生自然python学习笔记:Matplotlib 基本绘图
使用 Matplotlib 组件绘图时,经常要与 Numpy 组件搭配使用 . 使用 Matplotlib 绘图首先要导入 Matplotlib 组件 , 由于大部分绘图功能是在 matplotlib ...
随机推荐
- kafka和zookeeper的配置文件优化配置
zookeeper的配置 日志自动清理这两个参数都是在zoo.cfg中配置的: autopurge.purgeInterval 这个参数指定了清理频率,单位是小时,需要填写一个1或更大的整数,默 ...
- request cluster ID mismatch
删除了etcd集群所有节点中的--data_dir的内容 [root@node3 ~]# cd /var/lib/etcd/ [root@node3 etcd]# ls member [root@no ...
- ubuntu18.04开机提示welcome to emergency mode! after logging in type...的解决办法
开机就是报错,进不了系统. 原因是我的ubuntu电脑绑定了之前的移动硬盘,而我开机的时候并没有插着移动硬盘. 所以解决办法是,在此命令行下,以root用户的身份(我这里默认是root用户),vim ...
- python迭代器、生成器、装饰器之迭代器
迭代是Python最强大的功能之一,是访问集合元素的一种方式. 一般分为可迭代对象,迭代器,可迭代对象不一定是迭代器,但迭代器一定是可迭代对象 1.可以直接作用于for循环的数据类型 第一类:集合数据 ...
- element-ui中的表格嵌套表格
element-ui中有详细的各种表格及表格方法.也有表格展开出现二级的样式,但是却没有表格嵌套二级表格的方案,于是就自己写了一个,样式图如下: 展开后如下 这就是一个普通的二级表格嵌套,用的是el- ...
- 安卓中listview中性能优化的处理
1.在adapter中的getView方法中尽量少使用逻辑 不要在你的getView()中写过多的逻辑代码,我们能够将这些代码放在别的地方.比如: 优化前的getView(): @Override p ...
- liunx -bash:ls:command not found,执行命令总是报找不到
解决办法: 使用绝对命令vi打开profile /bin/vi /etc/profile 添加: export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/ ...
- css3 float排序问题
css3 float排序问题 有时候发现 会错位 那是因为有个图片大小不一致才会这样 所以要确保每个图片一样
- MySQL(五)中的redo&undo&binlog
MySQL中有六种日志文件,分别是:重做日志(redo log).回滚日志(undo log).二进制日志(binlog).错误日志(errorlog).慢查询日志(slow query log).一 ...
- 并行forearch的使用及测试(Parallel.Foreach)
using System; using System.Collections.Generic; using System.Diagnostics; using System.Threading.Tas ...