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的装饰器的运用
May 05 Python
Python读取指定目录下指定后缀文件并保存为docx
Apr 23 Python
Python实现PS滤镜Fish lens图像扭曲效果示例
Jan 29 Python
python pandas.DataFrame选取、修改数据最好用.loc,.iloc,.ix实现
Jun 11 Python
python二进制文件的转译详解
Jul 03 Python
对Django的restful用法详解(自带的增删改查)
Aug 28 Python
django formset实现数据表的批量操作的示例代码
Dec 06 Python
如何基于python3和Vue实现AES数据加密
Mar 27 Python
给keras层命名,并提取中间层输出值,保存到文档的实例
May 23 Python
python3.4中清屏的处理方法
Jul 06 Python
python操作微信自动发消息的实现(微信聊天机器人)
Jul 14 Python
Pycharm快捷键配置详细整理
Oct 13 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生成sitemap.xml地图函数
2013/11/13 PHP
PHP实现获取第一个中文首字母并进行排序的方法
2017/05/09 PHP
Array.prototype.slice 使用扩展
2010/06/09 Javascript
Document对象内容集合(比较全)
2010/09/06 Javascript
使用javascript创建快捷方式的简单实例
2013/08/09 Javascript
Javascript表格翻页效果的具体实现
2013/10/05 Javascript
JQuery为页面Dom元素绑定事件及解除绑定方法
2014/04/23 Javascript
理解javascript回调函数
2014/12/28 Javascript
在JavaScript中访问字符串的子串
2015/07/07 Javascript
JavaScript生成.xls文件的代码
2016/12/22 Javascript
简单实现JavaScript弹幕效果
2020/08/27 Javascript
NodeJs使用Mysql模块实现事务处理实例
2017/05/31 NodeJs
本地存储localStorage用法详解
2017/07/31 Javascript
解决option标签selected=&quot;selected&quot;属性失效的问题
2017/11/06 Javascript
jQuery实现炫丽的3d旋转星空效果
2018/07/04 jQuery
JavaScript中的回调函数实例讲解
2019/01/27 Javascript
js实现贪吃蛇小游戏(加墙)
2020/07/31 Javascript
jQuery实现本地存储
2020/12/22 jQuery
基于JavaScript实现简单的轮播图
2021/03/03 Javascript
[55:26]DOTA2-DPC中国联赛 正赛 Aster vs LBZS BO3 第一场 2月23日
2021/03/11 DOTA
python实现简单的计时器功能函数
2015/03/14 Python
浅谈python中copy和deepcopy中的区别
2017/10/23 Python
对numpy.append()里的axis的用法详解
2018/06/28 Python
python框架中flask知识点总结
2018/08/17 Python
Python面向对象之多态原理与用法案例分析
2019/12/30 Python
pytorch实现onehot编码转为普通label标签
2020/01/02 Python
python 生成任意形状的凸包图代码
2020/04/16 Python
职业生涯规划设计步骤
2014/01/12 职场文书
《一本男孩子必读的书》教学反思
2014/02/19 职场文书
2014爱耳日宣传教育活动总结
2014/03/09 职场文书
计算机专业毕业生自荐书
2014/06/02 职场文书
2014党员学习兰辉先进事迹思想汇报
2014/09/17 职场文书
购房协议书范本(无房产证)
2014/10/07 职场文书
《秋天的怀念》教学反思
2016/02/17 职场文书
80行代码写一个Webpack插件并发布到npm
2021/05/24 Javascript
Mysql中的触发器定义及语法介绍
2022/06/25 MySQL