簡體   English   中英

matplotlib可以只更新最新的數字嗎?

[英]Can matplotlib only update the newest point to the figure?

matplotlib是否有可能只更新最新的數字而不是重新繪制整個數字?

例如:這可能是動態繪圖的最快方式

initiate:
fig1 = Figure(figsize = (8.0,8.0),dpi = 100)
axes1 = fig1.add_subplot(111)
line1, = axes1.plot([],[],animated = True)

when new data is coming:
line1.set_data(new_xarray,new_yarray)
axes1.draw_artist(line1)
fig1.canvas.update()
fig1.canvas.flush_events()

但這將重新繪制整個數字! 我認為這是否可行:

when new data is coming:
axes1.draw_only_last_point(new_x,new_y)
update_the_canvas()

它只會將這個新點(new_x,new_y)添加到軸而不是重新繪制每個點。

如果您知道python的哪個圖形庫可以做到這一點,請回答或評論,非常感謝!!!!!

真的很感謝你的幫助!

只重繪整個圖形的問題,即只要數字不變就可以重繪線條本身? 事先知道數據嗎?

如果這些問題的答案是否定的,那么可能值得查看matplotlib的animate -class。 預先知道數據但是逐個繪制點的一個示例此示例 在該示例中,如果最新點在當前x-lim之外,則重繪該圖。 如果您知道數據的范圍,可以通過預先設置限制來避免它。

您可能還想查看此答案動畫示例列表動畫文檔

這是我(迄今為止)的一點經驗。
我在幾個月前開始使用Python(2.x)和openCV(2.4.13)作為圖形庫。我發現可能首先預測openCV for python的工作方式與matplotlib一樣多,並且(略有不同)它們可以工作一起。

在某些條件之后我不得不更新一些像素。 我首先使用opencv從圖像中進行了詳細說明,獲得了一個numpy 2D數組,就像一個矩陣。 訣竅是:opencv主要將輸入視為圖像,首先是X作為寬度,然后是Y作為高度。 numpy結構希望行和列實際上是X之前的Y.

考慮到這一點,我逐個像素地更新了圖像矩陣A並再次用色彩圖繪制它

import matplotlib as plt
import cv2
A = cv2.imread('your_image.png',0) # 0 means grayscale
# now you loaded an image in a numpy array A
for every new x,y pixel
A[y,x] = new pixel intensity value
plot = plt.imshow(A, 'CMRmap')
plt.show()

如果您想再次拍攝圖片,請考慮使用此圖片

import matplotlib.image as mpimg
#previous code
mpimg.imsave("newA.png", A)

如果你想使用顏色,請記住顏色的圖像是X乘Y 3 numpy數組,但matplotlib有RGB作為正確的通道順序,openCv使用BGR順序。 所以

C = cv2.imread('colour_reference.png',1) # 1 means BGR
A[y,x,0] = newRedvalue = C[y,x][2]
A[y,x,1] = newGreenvalue = C[y,x][1]
A[y,x,2] = newBluevalue = C[y,x][0]

我希望這會以某種方式幫助你

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM