You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
importmatplotlib.pyplotaspltimportnumpyasnpx=np.linspace(0, 2*np.pi, 100)
fig, ax=plt.subplots()
# animated=True tells matplotlib to only draw the artist when we# explicitly request it
(ln,) =ax.plot(x, np.sin(x), animated=True)
# make sure the window is raised, but the script keeps goingplt.show(block=False)
# stop to admire our empty window axes and ensure it is rendered at# least once.## We need to fully draw the figure at its final size on the screen# before we continue on so that :# a) we have the correctly sized and drawn background to grab# b) we have a cached renderer so that ``ax.draw_artist`` works# so we spin the event loop to let the backend process any pending operationsplt.pause(0.1)
# get copy of entire figure (everything inside fig.bbox) sans animated artistbg=fig.canvas.copy_from_bbox(fig.bbox)
# draw the animated artist, this uses a cached rendererax.draw_artist(ln)
# show the result to the screen, this pushes the updated RGBA buffer from the# renderer to the GUI framework so you can see itfig.canvas.blit(fig.bbox)
forjinrange(100):
# reset the background back in the canvas state, screen unchangedfig.canvas.restore_region(bg)
# update the artist, neither the canvas state nor the screen have changedln.set_ydata(np.sin(x+ (j/100) *np.pi))
# re-render the artist, updating the canvas state, but not the screenax.draw_artist(ln)
# copy the image to the GUI state, but screen might not changed yetfig.canvas.blit(fig.bbox)
# flush any pending GUI events, re-painting the screen if neededfig.canvas.flush_events()
# you can put a pause in if you want to slow things down# plt.pause(.1)
There is definitely some subtle differences in the details of when various parts of the render / put-on-screen process happen between the OSX backend and the other backends.
Bug report
While reviewing #10187 it was noted the
cv.flush_events
does not work the same with the osx backend as the other GUI backends.I suspect that if someone knows how to work with the OSX GUI code this will be straight forward to implement.
Bug summary
The issue is likely the
flush_events
function in the objective-c code does not appear to process any of the pending UI eventsmatplotlib/src/_macosx.m
Lines 391 to 402 in 77f23da
The
Code for reproduction
Run the exampls in #10187
Actual outcome
The window does not update during the loop
Expected outcome
It behaves as when
plt.pause(.1)
is un-commentedMatplotlib version
print(matplotlib.get_backend())
): OSXThe text was updated successfully, but these errors were encountered: