Python matplotlib实时画图案例


Posted in Python onApril 23, 2020

实时画图

import matplotlib.pyplot as plt

ax = []   # 定义一个 x 轴的空列表用来接收动态的数据
ay = []   # 定义一个 y 轴的空列表用来接收动态的数据
plt.ion()   # 开启一个画图的窗口
for i in range(100): # 遍历0-99的值
 ax.append(i)  # 添加 i 到 x 轴的数据中
 ay.append(i**2) # 添加 i 的平方到 y 轴的数据中
 plt.clf()  # 清除之前画的图
 plt.plot(ax,ay) # 画出当前 ax 列表和 ay 列表中的值的图形
 plt.pause(0.1)  # 暂停一秒
 plt.ioff()  # 关闭画图的窗口

实时画图 效果图

Python matplotlib实时画图案例

补充知识:Python 绘图与可视化 matplotlib 动态条形图 bar

第一种办法

一种方法是每次都重新画,包括清除figure

def animate(fi):
 bars=[]
 if len(frames)>fi:
  # axs.text(0.1,0.90,time_template%(time.time()-start_time),transform=axs.transAxes)#所以这样
  time_text.set_text(time_template%(0.1*fi))#这个必须没有axs.cla()才行
  # axs.cla()
  axs.set_title('bubble_sort_visualization')
  axs.set_xticks([])
  axs.set_yticks([])
  bars=axs.bar(list(range(Data.data_count)),#个数
    [d.value for d in frames[fi]],#数据
    1,    #宽度
    color=[d.color for d in frames[fi]]#颜色
    ).get_children()
 return bars
 anim=animation.FuncAnimation(fig,animate,frames=len(frames), interval=frame_interval,repeat=False)

这样效率很低,而且也有一些不可取的弊端,比如每次都需要重新设置xticks、假如figure上添加的有其他东西,这些东西也一并被clear了,还需要重新添加,比如text,或者labale。

第二种办法

可以像平时画线更新data那样来更新bar的高

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006 
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
import matplotlib.pyplot as plt
import numpy as np
from matplotlib import animation
 
 
fig=plt.figure(1,figsize=(4,3))
ax=fig.add_subplot(111)
ax.set_title('bar_animate_test')
#ax.set_xticks([])注释了这个是能看到变化,要不看不到变化,不对,能看到变化,去了注释吧
#ax.set_yticks([])
ax.set_xlabel('xlable')
N=5
frames=50
x=np.arange(1,N+1)
 
collection=[]
collection.append([i for i in x])
for i in range(frames):
 collection.append([ci+1 for ci in collection[i]])
print(collection)
xstd=[0,1,2,3,4]
bars=ax.bar(x,collection[0],0.30)
def animate(fi):
 # collection=[i+1 for i in x]
 ax.set_ylim(0,max(collection[fi])+3)#对于问题3,添加了这个
 for rect ,yi in zip(bars,collection[fi]):
 rect.set_height(yi)
 # bars.set_height(collection)
 return bars
anim=animation.FuncAnimation(fig,animate,frames=frames,interval=10,repeat=False)
plt.show()

问题

*)TypeError: ‘numpy.int32' object is not iterable

x=np.arange(1,N+1)<br>collection=[i for i in x]
#collection=[i for i in list(x)]#错误的认为是dtype的原因,将这里改成了list(x)
for i in range(frames):
 collection.append([ci+1 for ci in collection[i]])#问题的原因是因为此时的collection还是一个一位数组,所以这个collection[i]是一个x里的一个数,并不是一个列表,我竟然还以为的dtype的原因,又改了
xstd=[0,1,2,3,4]

应该是

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006 
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
collection=[]
collection.append([i for i in x])#成为二维数组
for i in range(frames):
 collection.append([ci+1 for ci in collection[i]])

然后又出现了下面的问题:

*)TypeError: only size-1 arrays can be converted to Python scalars

Traceback (most recent call last):
 File "forTest.py", line 22, in <module>
 bars=ax.bar(x,collection,0.30)
 File "C:\Users\Administrator.SC-201605202132\Envs\sort\lib\site-packages\matplotlib\__init__.py", line 1589, in inner
 return func(ax, *map(sanitize_sequence, args), **kwargs)
 File "C:\Users\Administrator.SC-201605202132\Envs\sort\lib\site-packages\matplotlib\axes\_axes.py", line 2430, in bar
 label='_nolegend_',
 File "C:\Users\Administrator.SC-201605202132\Envs\sort\lib\site-packages\matplotlib\patches.py", line 707, in __init__
 Patch.__init__(self, **kwargs)
 File "C:\Users\Administrator.SC-201605202132\Envs\sort\lib\site-packages\matplotlib\patches.py", line 89, in __init__
 self.set_linewidth(linewidth)
 File "C:\Users\Administrator.SC-201605202132\Envs\sort\lib\site-packages\matplotlib\patches.py", line 368, in set_linewidth
 self._linewidth = float(w)
TypeError: only size-1 arrays can be converted to Python scalars

应该是传递的参数错误,仔细想了一下,在报错的代码行中,collection原来是没错的,因为原来是一维数组,现在变成二维了,改为

bars=ax.bar(x,collection[0],0.30)

好了

*)出现的问题,在上面的代码中,运行的时候不会画布的大小不会变,会又条形图溢出的情况,在animate()中添加了

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006 
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
def animate(fi):
 # collection=[i+1 for i in x]
 ax.set_ylim(0,max(collection[fi])+3)#添加了这个
 for rect ,yi in zip(bars,collection[fi]):
 rect.set_height(yi)
 
 # bars.set_height(collection)
 return bars

别的属性

*)条形图是怎样控制间隔的:

是通过控制宽度

width=1,#没有间隔,每个条形图会紧挨着

*)errorbar:

是加一个横线,能通过xerr和yerr来调整方向

Python matplotlib实时画图案例

xstd=[0,1,2,3,4]
bars=ax.bar(x,collection,0.30,xerr=xstd)

以上这篇Python matplotlib实时画图案例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python使用paramiko模块实现ssh远程登陆上传文件并执行
Jan 27 Python
python脚本内运行linux命令的方法
Jul 02 Python
python开发中module模块用法实例分析
Nov 12 Python
谈谈Python进行验证码识别的一些想法
Jan 25 Python
详解Python的Lambda函数与排序
Oct 25 Python
Python中实现单例模式的n种方式和原理
Nov 14 Python
python selenium firefox使用详解
Feb 26 Python
Python实现的对一个数进行因式分解操作示例
Jun 27 Python
Python学习笔记之Break和Continue用法分析
Aug 14 Python
python剪切视频与合并视频的实现
Mar 03 Python
Jupyter Notebook 文件默认目录的查看以及更改步骤
Apr 14 Python
python游戏开发Pygame框架
Apr 22 Python
windows下的pycharm安装及其设置中文菜单
Apr 23 #Python
使用python+poco+夜神模拟器进行自动化测试实例
Apr 23 #Python
PyCharm设置Ipython交互环境和宏快捷键进行数据分析图文详解
Apr 23 #Python
python+adb命令实现自动刷视频脚本案例
Apr 23 #Python
python+adb+monkey实现Rom稳定性测试详解
Apr 23 #Python
通过python调用adb命令对App进行性能测试方式
Apr 23 #Python
python 将视频 通过视频帧转换成时间实例
Apr 23 #Python
You might like
php对象和数组相互转换的方法
2015/05/12 PHP
JSON两种结构之对象和数组的理解
2016/07/19 PHP
Mac版PhpStorm之XAMPP整合apache服务器配置的图文教程详解
2016/10/13 PHP
php+ajax 文件上传代码实例
2019/03/18 PHP
浅谈laravel-admin的sortable和orderby使用问题
2019/10/03 PHP
jquery自定义函数的多种方法
2014/01/09 Javascript
使用jQuery判断IE浏览器版本的代码
2014/06/14 Javascript
21个JavaScript事件(Events)属性汇总
2014/12/02 Javascript
node.js回调函数之阻塞调用与非阻塞调用
2015/11/13 Javascript
你有必要知道的25个JavaScript面试题
2015/12/29 Javascript
一篇文章掌握RequireJS常用知识
2016/01/26 Javascript
jQuery插件 Jqplot图表实例
2016/06/18 Javascript
javascript设计模式Constructor(构造器)模式
2016/08/19 Javascript
微信小程序 MD5加密登录密码详解及实例代码
2017/01/12 Javascript
轻松理解JavaScript之AJAX
2017/03/15 Javascript
Node.js 中使用 async 函数的方法
2017/11/20 Javascript
React-native桥接Android原生开发详解
2018/01/17 Javascript
Vue 自定义标签的src属性不能使用相对路径的解决
2019/09/17 Javascript
js回调函数原理与用法案例分析
2020/03/04 Javascript
Vue中正确使用Element-UI组件的方法实例
2020/10/13 Javascript
Python跨文件全局变量的实现方法示例
2017/12/10 Python
一篇文章搞懂Python的类与对象名称空间
2018/12/10 Python
python可视化text()函数使用详解
2020/02/11 Python
实例教程 一款纯css3实现的数字统计游戏
2014/11/10 HTML / CSS
意大利灯具购物网站:Lampade.it
2018/10/18 全球购物
Farfetch美国:奢侈品牌时尚购物平台
2019/05/02 全球购物
C/C++有关内存的思考题
2015/12/04 面试题
如何保障Web服务器安全
2014/05/05 面试题
WebSphere面试题:在WebSphere里面如何部署一个应用
2015/08/02 面试题
化工工艺专业求职信
2013/09/22 职场文书
安全生产月宣传标语
2014/10/06 职场文书
党员对照检查剖析材料
2014/10/13 职场文书
2016年教代会开幕词
2016/03/04 职场文书
如果用一句诗总结你的上半年,你会用哪句呢?
2019/07/16 职场文书
Spring Cloud Netflix 套件中的负载均衡组件 Ribbon
2022/04/13 Java/Android
MySQL 逻辑备份 into outfile
2022/05/15 MySQL