Matplotlib第二个交互式绘图无法更新绘制点的问题求助
Matplotlib第二个交互式绘图无法更新绘制点的问题求助
我最近碰到个头疼的问题:想实现两个交互式绘图,第二个得等第一个关闭后再显示。下面这个最小示例里,交互逻辑很简单——用户点击绘图区域的任意位置,就会在点击处画个点,同时把坐标打印到控制台。
import matplotlib.pyplot as plt def onclick(event): # 这个不管第一次还是第二次都会打印 print(event.xdata, event.ydata) # 只有第一次绘图时能正常画点 plt.scatter(event.xdata, event.ydata) for i in range(2): plt.plot([1, 2, 3, 4]) plt.gca().figure.canvas.mpl_connect('button_press_event', onclick) with plt.ion(): plt.show(block=True)
现在的问题是:第二个绘图里点击后,点根本显示不出来!但坐标还是能正常打印,说明点击事件确实触发了,就是绘图更新这一步没生效,其他功能都没问题。
我已经试过这些方法,但都没用:
- 切换不同的后端(Qt、Tk)
- 在循环最后加
plt.close() - 在循环最后加
plt.pause(1) - 不用上下文管理器,改用
plt.ion()和plt.ioff()组合 - 在循环结束时手动解绑事件,用
canvas.mpl_disconnect(cid)(cid是mpl_connect返回的ID) - 尝试用
plt.draw()+plt.pause(1)强制更新绘图 - 不用循环,直接把代码复制粘贴两遍
- 在循环里用
fig, ax = plt.subplots(),然后在onclickhandler里用ax.scatter()来明确指定绘图的坐标轴
补充下环境:我用的是matplotlib 3.9.4,Python版本是3.9.20,这是因为要兼容一些我没法控制的依赖。
备注:内容来源于stack exchange,提问作者dirtbirb
相关产品推荐
相关产品推荐

