博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python 绘图与可视化 matplotlib 动态条形图 bar
阅读量:4840 次
发布时间:2019-06-11

本文共 3879 字,大约阅读时间需要 12 分钟。

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的高

import matplotlib.pyplot as pltimport numpy as npfrom matplotlib import animationfig=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=5frames=50x=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 barsanim=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) 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]

  应该是

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 
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()中添加了

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来调整方向

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

  

 

转载于:https://www.cnblogs.com/Gaoqiking/p/11261336.html

你可能感兴趣的文章
ubuntu切换到root
查看>>
MYSQL limit用法
查看>>
Windows7下出现“不支持此接口”的解决方案
查看>>
实现dhtmlxTree树型控件单击展开收缩功能
查看>>
不能在DropDownList 中选择多个项
查看>>
【Unity渲染】Camera RenderToCubemap 渲染到立方体纹理
查看>>
n2n网络穿透内网
查看>>
让“懒惰” Linux 运维工程师事半功倍的 10 个关键技巧!
查看>>
写给自己看的小设计4 - 对象设计通用原则之扩展原则
查看>>
oem 重建
查看>>
LNMP之Nginx
查看>>
构造函数中的异常处理(转)
查看>>
SI Macro
查看>>
jquery动态调整div大小使其宽度始终为浏览器宽度
查看>>
这篇文章主要为大家详细介绍了jQuery密码强度验证控件使用详解的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...
查看>>
寒假作业
查看>>
「Vue」nrm
查看>>
[汇编语言]-第五章段前缀及使用 一段安全的空间
查看>>
在Windows环境中利用Responder工具窃取NTLMv2哈希
查看>>
NOIP17提高模拟训练18 长途旅行(travel)
查看>>