使用matplotlib绘制单个散点图 如何避免运行代码时出现多图
matplotlib单次运行仅生成单张散点图的解决方案
这个问题的核心是matplotlib会默认保留全局状态中未被关闭的画布实例,连续运行代码时,前一次运行创建的画布如果没有被正确清理,就会和新创建的画布叠加,出现多次运行弹出多图的情况。你可以通过以下任意一种方法解决:
- 方案1:绘图前主动清理所有已有画布
在代码开头添加plt.close('all'),强制关闭所有已创建的未显示/未关闭的画布,保证每次运行都是全新的画布环境。修改后代码如下:
plt.close('all') plt.figure() plt.scatter(x[:2], y[:2], s=100, c='red', label='Tall students') plt.scatter(x[2:], y[2:], s=100, c='blue', label='Short students') plt.show()
如果仅需要清空当前画布而非关闭所有历史画布,也可以将plt.close('all')替换为plt.clf()。
- 方案2:使用面向对象的显式画布管理写法
直接显式绑定画布和轴对象,避免依赖matplotlib的全局状态,从根源上避免状态残留问题,写法更稳定可靠,示例代码:
fig, ax = plt.subplots() ax.scatter(x[:2], y[:2], s=100, c='red', label='Tall students') ax.scatter(x[2:], y[2:], s=100, c='blue', label='Short students') ax.legend() plt.show()
- 方案3:Jupyter环境补充配置
如果是在Jupyter Notebook/Lab中运行,可以在代码开头添加魔法命令%matplotlib inline,该配置会让每次绘图后自动释放画布资源,避免累积。
内容的提问来源于stack exchange,提问作者Vishwa
相关产品推荐
相关产品推荐

