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的哪个图形库可以做到这一点,请回答或评论,非常感谢!!!!!
真的很感谢你的帮助!
答案 0 :(得分:0)
只是重绘整个数字的问题,即只要数字不变就可以重新绘制线条本身?事先知道数据吗?
如果这些问题的答案为否,那么可能值得查看matplotlib的animate
- 类。预先知道数据但逐点绘制点的一个示例是this example。在该示例中,如果最新点在当前x-lim之外,则重绘该图。如果您知道数据范围,可以通过事先设置限制来避免它。
您可能还想查看this answer,animate example list或animate 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]
我希望这会以某种方式帮助你