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简单进程锁代码实例
Apr 27 Python
python使用in操作符时元组和数组的区别分析
May 19 Python
python实现下载整个ftp目录的方法
Jan 17 Python
Python实现输出某区间范围内全部素数的方法
May 02 Python
python从子线程中获得返回值的方法
Jan 30 Python
python递归下载文件夹下所有文件
Aug 31 Python
pytorch torch.nn.AdaptiveAvgPool2d()自适应平均池化函数详解
Jan 03 Python
基于Python数据结构之递归与回溯搜索
Feb 26 Python
Python编程快速上手——强口令检测算法案例分析
Feb 29 Python
30行Python代码实现高分辨率图像导航的方法
May 22 Python
Python利用Faiss库实现ANN近邻搜索的方法详解
Aug 03 Python
深度学习tensorflow基础mnist
Apr 14 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令牌 Token改进版
2008/07/18 PHP
php 获取远程网页内容的函数
2009/09/08 PHP
php判断输入不超过mysql的varchar字段的长度范围
2011/06/24 PHP
php获取参数的几种方法总结
2014/02/18 PHP
Linux系统中为php添加pcntl扩展
2016/08/28 PHP
使用PHP json_decode可能遇到的坑与解决方法
2017/08/03 PHP
详谈PHP中public,private,protected,abstract等关键字的用法
2017/12/31 PHP
Laravel框架实现定时发布任务的方法
2018/08/16 PHP
利用ASP发送和接收XML数据的处理方法与代码
2007/11/13 Javascript
Jquery 扩展方法
2010/05/06 Javascript
js添加table的行和列 具体实现方法
2013/07/22 Javascript
根据身份证号自动输出相关信息(籍贯,出身日期,性别)
2013/11/15 Javascript
Js 导出table内容到Excel的简单实例
2013/11/19 Javascript
基于JS实现回到页面顶部的五种写法(从实现到增强)
2016/09/03 Javascript
理解Angular的providers给Http添加默认headers
2017/07/04 Javascript
微信小程序后台持续定位功能使用详解
2019/08/23 Javascript
JS实现打砖块游戏
2020/02/14 Javascript
JS实现碰撞检测效果
2020/03/12 Javascript
vue动态加载SVG文件并修改节点数据的操作代码
2020/08/17 Javascript
零基础写python爬虫之抓取百度贴吧并存储到本地txt文件改进版
2014/11/06 Python
Python实现抓取城市的PM2.5浓度和排名
2015/03/19 Python
python生成IP段的方法
2015/07/07 Python
Python中enumerate函数代码解析
2017/10/31 Python
pandas数据处理基础之筛选指定行或者指定列的数据
2018/05/03 Python
django为Form生成的label标签添加class方式
2020/05/20 Python
python线程池如何使用
2020/05/28 Python
应届生妇产科护士求职信
2013/10/27 职场文书
理货员的岗位职责
2013/11/23 职场文书
采购主管的岗位职责
2013/12/17 职场文书
新闻学专业职业生涯规划范文:我的人生我做主
2014/09/12 职场文书
检察机关个人对照检查材料
2014/09/15 职场文书
个人作风建设自查报告
2014/10/22 职场文书
预备党员2014年第四季度思想汇报范文
2014/10/25 职场文书
2014年英语教研组工作总结
2014/12/06 职场文书
社区服务理念口号
2015/12/25 职场文书
如何用JavaScript学习算法复杂度
2021/04/30 Javascript