繁体   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