Python matplotlib實(shí)時(shí)畫(huà)圖案例
實(shí)時(shí)畫(huà)圖
import matplotlib.pyplot as plt ax = [] # 定義一個(gè) x 軸的空列表用來(lái)接收動(dòng)態(tài)的數(shù)據(jù) ay = [] # 定義一個(gè) y 軸的空列表用來(lái)接收動(dòng)態(tài)的數(shù)據(jù) plt.ion() # 開(kāi)啟一個(gè)畫(huà)圖的窗口 for i in range(100): # 遍歷0-99的值 ax.append(i) # 添加 i 到 x 軸的數(shù)據(jù)中 ay.append(i**2) # 添加 i 的平方到 y 軸的數(shù)據(jù)中 plt.clf() # 清除之前畫(huà)的圖 plt.plot(ax,ay) # 畫(huà)出當(dāng)前 ax 列表和 ay 列表中的值的圖形 plt.pause(0.1) # 暫停一秒 plt.ioff() # 關(guān)閉畫(huà)圖的窗口
實(shí)時(shí)畫(huà)圖 效果圖
補(bǔ)充知識(shí):Python 繪圖與可視化 matplotlib 動(dòng)態(tài)條形圖 bar
第一種辦法
一種方法是每次都重新畫(huà),包括清除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))#這個(gè)必須沒(méi)有axs.cla()才行 # axs.cla() axs.set_title('bubble_sort_visualization') axs.set_xticks([]) axs.set_yticks([]) bars=axs.bar(list(range(Data.data_count)),#個(gè)數(shù) [d.value for d in frames[fi]],#數(shù)據(jù) 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)
這樣效率很低,而且也有一些不可取的弊端,比如每次都需要重新設(shè)置xticks、假如figure上添加的有其他東西,這些東西也一并被clear了,還需要重新添加,比如text,或者labale。
第二種辦法
可以像平時(shí)畫(huà)線更新data那樣來(lái)更新bar的高
''' 遇到問(wèn)題沒(méi)人解答?小編創(chuàng)建了一個(gè)Python學(xué)習(xí)交流QQ群:857662006 尋找有志同道合的小伙伴,互幫互助,群里還有不錯(cuò)的視頻學(xué)習(xí)教程和PDF電子書(shū)! ''' 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([])注釋了這個(gè)是能看到變化,要不看不到變化,不對(duì),能看到變化,去了注釋吧 #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)#對(duì)于問(wèn)題3,添加了這個(gè) 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()
問(wèn)題
*)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)]#錯(cuò)誤的認(rèn)為是dtype的原因,將這里改成了list(x) for i in range(frames): collection.append([ci+1 for ci in collection[i]])#問(wèn)題的原因是因?yàn)榇藭r(shí)的collection還是一個(gè)一位數(shù)組,所以這個(gè)collection[i]是一個(gè)x里的一個(gè)數(shù),并不是一個(gè)列表,我竟然還以為的dtype的原因,又改了 xstd=[0,1,2,3,4]
應(yīng)該是
''' 遇到問(wèn)題沒(méi)人解答?小編創(chuàng)建了一個(gè)Python學(xué)習(xí)交流QQ群:857662006 尋找有志同道合的小伙伴,互幫互助,群里還有不錯(cuò)的視頻學(xué)習(xí)教程和PDF電子書(shū)! ''' collection=[] collection.append([i for i in x])#成為二維數(shù)組 for i in range(frames): collection.append([ci+1 for ci in collection[i]])
然后又出現(xiàn)了下面的問(wèn)題:
*)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
應(yīng)該是傳遞的參數(shù)錯(cuò)誤,仔細(xì)想了一下,在報(bào)錯(cuò)的代碼行中,collection原來(lái)是沒(méi)錯(cuò)的,因?yàn)樵瓉?lái)是一維數(shù)組,現(xiàn)在變成二維了,改為
bars=ax.bar(x,collection[0],0.30)
好了
*)出現(xiàn)的問(wèn)題,在上面的代碼中,運(yùn)行的時(shí)候不會(huì)畫(huà)布的大小不會(huì)變,會(huì)又條形圖溢出的情況,在animate()中添加了
''' 遇到問(wèn)題沒(méi)人解答?小編創(chuàng)建了一個(gè)Python學(xué)習(xí)交流QQ群:857662006 尋找有志同道合的小伙伴,互幫互助,群里還有不錯(cuò)的視頻學(xué)習(xí)教程和PDF電子書(shū)! ''' def animate(fi): # collection=[i+1 for i in x] ax.set_ylim(0,max(collection[fi])+3)#添加了這個(gè) for rect ,yi in zip(bars,collection[fi]): rect.set_height(yi) # bars.set_height(collection) return bars
別的屬性
*)條形圖是怎樣控制間隔的:
是通過(guò)控制寬度
width=1,#沒(méi)有間隔,每個(gè)條形圖會(huì)緊挨著
*)errorbar:
是加一個(gè)橫線,能通過(guò)xerr和yerr來(lái)調(diào)整方向
xstd=[0,1,2,3,4]
bars=ax.bar(x,collection,0.30,xerr=xstd)
以上這篇Python matplotlib實(shí)時(shí)畫(huà)圖案例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- python Matplotlib畫(huà)圖之調(diào)整字體大小的示例
- Python matplotlib畫(huà)圖時(shí)圖例說(shuō)明(legend)放到圖像外側(cè)詳解
- python matplotlib畫(huà)圖實(shí)例代碼分享
- Python畫(huà)柱狀統(tǒng)計(jì)圖操作示例【基于matplotlib庫(kù)】
- python matplotlib畫(huà)圖庫(kù)學(xué)習(xí)繪制常用的圖
- python使用Matplotlib畫(huà)條形圖
- python使用Matplotlib畫(huà)餅圖
- python?matplotlib各種畫(huà)圖
- Python中使用Matplotlib進(jìn)行多圖繪制的詳細(xì)教程
相關(guān)文章
Python實(shí)現(xiàn)王者榮耀自動(dòng)刷金幣的完整步驟
這篇文章主要介紹了Python實(shí)現(xiàn)王者農(nóng)藥自動(dòng)刷金幣的完整步驟,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01Python自動(dòng)化測(cè)試之異常處理機(jī)制實(shí)例詳解
為了保持自動(dòng)化測(cè)試用例的健壯性,異常的捕獲及處理,日志的記錄對(duì)掌握自動(dòng)化測(cè)試執(zhí)行情況尤為重要,下面這篇文章主要給大家介紹了關(guān)于Python自動(dòng)化測(cè)試之異常處理機(jī)制的相關(guān)資料,需要的朋友可以參考下2022-06-06python django 增刪改查操作 數(shù)據(jù)庫(kù)Mysql
下面小編就為大家?guī)?lái)一篇python django 增刪改查操作 數(shù)據(jù)庫(kù)Mysql。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-07-07Python實(shí)戰(zhàn)之單詞打卡統(tǒng)計(jì)
這篇文章主要介紹了Python實(shí)戰(zhàn)之單詞打卡統(tǒng)計(jì),文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)python的小伙伴們有非常好的幫助,需要的朋友可以參考下2021-04-04Python基礎(chǔ)之logging模塊知識(shí)總結(jié)
用Python寫(xiě)代碼的時(shí)候,在想看的地方寫(xiě)個(gè)print xx 就能在控制臺(tái)上顯示打印信息,這樣子就能知道它是什么了,但是當(dāng)我需要看大量的地方或者在一個(gè)文件中查看的時(shí)候,這時(shí)候print就不大方便了,所以Python引入了logging模塊來(lái)記錄我想要的信息,需要的朋友可以參考下2021-05-05Python利用多線程枚舉實(shí)現(xiàn)獲取wifi信息
這篇文章主要為大家詳細(xì)介紹了Python如何利用枚舉字典的方式來(lái)實(shí)現(xiàn)獲取wifi信息,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2022-12-12