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图形库可以做到这一点,请回答或评论,非常感谢!!!!!
真的很感谢你的帮助!
只重绘整个图形是问题吗?也就是说,只要图形不变,就可以重绘线条本身吗?数据事先知道吗?
如果这些问题的答案是NO和YES,那么可能值得研究matplotlib的animate
-类。数据是预先已知的,但点是一个接一个地绘制的一个例子就是这个例子。在本例中,如果最新点在当前x-lim之外,则会重新绘制图形。如果你知道你的数据范围,你可以通过预先设置限制来避免它。
您可能还想查看这个答案、动画示例列表或动画文档。
这是我(到目前为止)的一点经验
一个月前,我开始使用Python(2.x)和openCV(2.4.13)作为图形库。我在5月的第一个项目中发现,openCV for python与matplotlib一样使用numpy结构,并且(略有不同)它们可以协同工作。
在出现某种情况后,我不得不更新一些像素。我首先用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]
我希望这将在某种程度上帮助您