plt.show()什么时候不用写?什么时候必须写?

在 Jupyter Notebook / IPython 环境中,默认开启 “自动显示模式”%matplotlib inline%matplotlib notebook),绘图后会自动渲染图像,无需手动调用 plt.show()。以下是具体分析:


1. 无需写 plt.show() 的场景

(1)Jupyter Notebook / JupyterLab

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)
plt.plot(x, np.sin(x))  # 直接显示图像,无需 plt.show()
  • 原因:Jupyter 会自动捕获 Matplotlib 的绘图输出并嵌入到单元格中。

(2)IPython 终端

In [1]: %matplotlib
Using matplotlib backend: TkAgg

In [2]: plt.plot([1,2,3])  # 图像窗口自动弹出
  • 原因%matplotlib 魔法命令会启用交互式后端。

(3)使用 matplotlib.pyplot 保存图像时

plt.plot([1,2,3])
plt.savefig("figure.png")  # 保存图像时,无需 plt.show()
  • 原因savefig() 会直接将图像写入文件,不依赖显示窗口。

(4)某些 IDE 的实时预览功能

  • PyCharm:在脚本中绘图时,会自动弹出预览窗口。
  • VS Code:安装 Matplotlib 扩展后,可实时渲染图像。

2. 必须写 plt.show() 的场景

(1)标准 Python 脚本(.py 文件)

# test.py
import matplotlib.pyplot as plt

plt.plot([1,2,3])
plt.show()  # 必须调用才能显示图像
  • 原因:脚本文件没有交互式环境,需要手动触发显示。

(2)使用非交互式后端时

import matplotlib
matplotlib.use('Agg')  # 非交互式后端(无窗口)
import matplotlib.pyplot as plt

plt.plot([1,2,3])
plt.savefig("figure.png")  # 仅保存,不显示
# plt.show()  # 此时调用也不会有窗口弹出

(3)多图绘制时,需要手动控制显示时机

plt.figure(1)
plt.plot([1,2,3])

plt.figure(2)
plt.plot([4,5,6])

plt.show()  # 同时显示两个图像窗口

3. 总结

环境/场景 是否需要 plt.show()
Jupyter Notebook / Lab 否(自动显示)
IPython 终端(%matplotlib) 否(自动弹出)
标准 Python 脚本(.py) 是(必须调用)
仅保存图像(savefig) 否(无需显示)
非交互式后端(如 Agg) 否(无窗口)

posted @ 2025-11-25 13:52  wangya216  阅读(75)  评论(0)    收藏  举报