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实现删除当前目录下除当前脚本以外的文件和文件夹实例
Jul 27 Python
详解Python中的文件操作
Aug 28 Python
centos6.4下python3.6.1安装教程
Jul 21 Python
python 删除指定时间间隔之前的文件实例
Apr 24 Python
Python+pandas计算数据相关系数的实例
Jul 03 Python
使用python验证代理ip是否可用的实现方法
Jul 25 Python
Python Pandas 获取列匹配特定值的行的索引问题
Jul 01 Python
pytorch 批次遍历数据集打印数据的例子
Dec 30 Python
tensorflow ckpt模型和pb模型获取节点名称,及ckpt转pb模型实例
Jan 21 Python
Python3 shutil(高级文件操作模块)实例用法总结
Feb 19 Python
Django media static外部访问Django中的图片设置教程
Apr 07 Python
Pytorch十九种损失函数的使用详解
Apr 29 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
简单了解将WordPress中的工具栏移到底部的小技巧
2015/12/31 PHP
YII框架实现自定义第三方扩展操作示例
2019/04/26 PHP
PHP7 foreach() 函数修改
2021/03/09 PHP
Node.js实战 建立简单的Web服务器
2012/03/08 Javascript
$(document).ready(function() {})不执行初始化脚本
2014/06/19 Javascript
js自调用匿名函数的三种写法(推荐)
2016/08/19 Javascript
jQuery实现表格元素动态创建功能
2017/01/09 Javascript
基于bootstrap实现收缩导航条
2017/03/17 Javascript
vue+express+jwt持久化登录的方法
2019/06/14 Javascript
深入了解JavaScript 的 WebAssembly
2019/06/15 Javascript
vue-property-decorator用法详解
2019/12/12 Javascript
Python实现的朴素贝叶斯算法经典示例【测试可用】
2018/06/13 Python
Python 利用scrapy爬虫通过短短50行代码下载整站短视频
2018/10/29 Python
基于python的ini配置文件操作工具类
2019/04/24 Python
Django之PopUp的具体实现方法
2019/08/31 Python
Python英文文章词频统计(14份剑桥真题词频统计)
2019/10/13 Python
Django框架请求生命周期实现原理
2020/11/13 Python
TensorFlow2.0使用keras训练模型的实现
2021/02/20 Python
Python之多进程与多线程的使用
2021/02/23 Python
Lenox官网:精美的瓷器&独特的礼品
2017/02/12 全球购物
Hunter Boots美国官方网站:赫特威灵顿雨靴
2018/06/16 全球购物
程序集与命名空间有什么不同
2014/07/25 面试题
计算机毕业大学生推荐信
2013/12/01 职场文书
统计岗位职责
2014/02/21 职场文书
模具专业毕业推荐信
2014/03/08 职场文书
《长城和运河》教学反思
2014/04/14 职场文书
小学家长评语大全
2014/04/16 职场文书
预备党员公开承诺书
2014/05/28 职场文书
2014年镇党建工作汇报材料
2014/11/02 职场文书
办公室主任岗位职责范本
2015/03/31 职场文书
电影建党伟业观后感
2015/06/01 职场文书
领导莅临指导欢迎词
2015/09/30 职场文书
2016年政治理论学习心得体会
2016/01/25 职场文书
JS封装cavans多种滤镜组件
2022/02/15 Javascript
Android Rxjava3 使用场景详解
2022/04/07 Java/Android
Docker下安装Oracle19c
2022/04/13 Servers