matplotlib只能更新图中的最新点吗?

时间:2016-08-02 23:14:33

标签: python opencv matplotlib

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的哪个图形库可以做到这一点,请回答或评论,非常感谢!!!!!

真的很感谢你的帮助!

2 个答案:

答案 0 :(得分:0)

只是重绘整个数字的问题,即只要数字不变就可以重新绘制线条本身?事先知道数据吗?

如果这些问题的答案为否,那么可能值得查看matplotlib的animate - 类。预先知道数据但逐点绘制点的一个示例是this example。在该示例中,如果最新点在当前x-lim之外,则重绘该图。如果您知道数据范围,可以通过事先设置限制来避免它。

您可能还想查看this answeranimate example listanimate documentation

答案 1 :(得分:0)

这是我(迄今为止)的一点经验 我在几个月前开始使用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]

我希望这会以某种方式帮助你