python绘制出来的图片默认保存在哪个路径
Python 绘制出来的图片默认保存在哪里,取决于你是否调用了保存方法:如果只是 plt.show() 或在 Jupyter 中显示图片,通常不会自动生成可查找的图片文件;如果使用 matplotlib.pyplot.savefig('图片名.png') 或 Pillow 的 image.save('图片名.png'),相对路径文件会保存到当前工作目录,也就是 os.getcwd() 返回的位置。
先判断图片到底有没有被保存
很多人搜索“python绘制出来的图片默认保存在哪个路径”,实际问题不是路径难找,而是代码只画图、显示图,没有执行保存。判断标准很直接:代码里是否出现了 savefig()、save()、cv2.imwrite() 等保存语句。如果没有,Python 通常只是在窗口、Notebook 输出区或 IDE 绘图面板里显示图像,不会在磁盘上留下一个 PNG、JPG 或 SVG 文件。

import matplotlib.pyplot as plt
plt.plot([1, 2, 3, 4])
plt.show() # 只显示,不等于保存
# plt.savefig("my_plot.png") # 这样才会保存
场景差异也要分清:命令行运行脚本时,当前工作目录常常是你执行 python script.py 的目录;PyCharm、VS Code 可能把运行配置里的 working directory 设成项目根目录;Jupyter Notebook 通常以 notebook 文件所在目录或启动 Jupyter 的目录为准。注意事项是:不要只看脚本文件在哪里,要看运行时的当前工作目录在哪里。
matplotlib 默认保存路径怎么判断
在 matplotlib 中,plt.savefig('my_plot.png') 使用的是相对路径,这个文件会保存到当前工作目录。可执行的检查方式是在保存前打印 os.getcwd(),再拼接文件名确认完整路径。
import os
import matplotlib.pyplot as plt
print("当前工作目录:", os.getcwd())
plt.plot([1, 2, 3, 4])
plt.savefig("my_plot.png", dpi=150, bbox_inches="tight")
print("图片完整路径:", os.path.abspath("my_plot.png"))
判断标准是:如果输出显示 /Users/name/project,那么 my_plot.png 就在 /Users/name/project/my_plot.png;如果显示的是 C:\Users\name,图片就在这个目录下。不同场景下,savefig('result/my_plot.png') 会保存到当前工作目录下的 result 子目录,而 savefig('/tmp/my_plot.png') 或 Windows 下的 savefig(r'C:\charts\my_plot.png') 才是绝对路径保存。注意:matplotlib 不会因为你写了脚本在某个文件夹,就自动把图保存到脚本同级目录。
Pillow 保存图片默认在哪里
Pillow 的逻辑类似:image.save('my_image.png') 里的 'my_image.png' 是相对路径,默认相对于当前工作目录。可执行做法是保存前创建输出目录,并使用 Path.resolve() 打印最终位置。
from pathlib import Path
from PIL import Image
output_dir = Path("output")
output_dir.mkdir(parents=True, exist_ok=True)
image = Image.new("RGB", (200, 100), "white")
save_path = output_dir / "my_image.png"
image.save(save_path)
print("图片保存到:", save_path.resolve())
判断标准是:相对路径会跟着当前工作目录走,绝对路径不会。场景差异在于,Pillow 的 save() 需要你给出文件名、路径或文件对象;如果给文件对象,通常还要明确格式,例如 format='PNG'。注意事项是:Pillow 不会自动创建不存在的多级目录,保存到 output/a.png 前应先创建 output,否则容易报 FileNotFoundError。
为什么有人说会保存到临时目录
严格来说,matplotlib 和 Pillow 在你显式保存相对路径时,常见默认位置是当前工作目录,不是系统临时目录。临时目录通常出现在这些场景:Jupyter、Web 服务或某些 IDE 为了预览图片生成中间文件;代码显式使用了 tempfile;某些第三方库把图像先写到临时文件再展示或上传。
import tempfile
print("系统临时目录:", tempfile.gettempdir())
判断标准是:如果你的代码或框架使用了 tempfile.NamedTemporaryFile()、TemporaryDirectory(),图片可能在临时目录;如果只是 plt.savefig('a.png') 或 image.save('a.png'),就优先看当前工作目录。场景差异是:Windows 常见临时目录可能在用户目录下的 AppData\Local\Temp,macOS 和 Linux 常见为 /tmp、/var/tmp 等。注意:临时目录中的文件可能被系统或程序清理,不适合保存重要结果。
推荐的保存方式:始终写清楚输出目录
最稳妥的做法是不要依赖默认路径,而是为图片设置固定输出目录。对于脚本项目,可以用脚本所在目录作为基准;对于数据分析项目,可以统一放到 figures、output 或 reports/images 目录。
from pathlib import Path
import matplotlib.pyplot as plt
base_dir = Path(__file__).resolve().parent
output_dir = base_dir / "figures"
output_dir.mkdir(parents=True, exist_ok=True)
plt.plot([10, 20, 15, 30])
plt.savefig(output_dir / "sales_trend.png", dpi=150, bbox_inches="tight")
判断标准是:保存后打印 resolve(),能看到完整路径;重新运行脚本时,图片仍然进入同一个目录。场景差异是:普通 .py 脚本可以使用 __file__,而 Jupyter Notebook 中通常没有可靠的 __file__,更适合用 Path.cwd() 或手动指定项目路径。注意事项是:文件名相同会覆盖旧图片,批量生成图表时建议加日期、参数名或序号。
找不到图片时的排查顺序
如果代码运行没有报错,但文件夹里找不到图片,可以按这个顺序排查。第一,确认确实调用了保存函数;第二,打印 os.getcwd();第三,打印 os.path.abspath('文件名.png');第四,检查保存语句是否在 plt.show() 之后导致图像状态变化;第五,确认目录存在、权限允许写入、文件名后缀正确。
import os
from pathlib import Path
filename = "my_plot.png"
print("cwd:", os.getcwd())
print("expected:", Path(filename).resolve())
print("exists:", Path(filename).exists())
判断标准是:exists 为 True 表示文件已生成;为 False 则说明保存位置、文件名或保存动作有问题。场景差异是:在服务器、Docker、定时任务中,当前工作目录可能不是你的项目目录;在 Web 应用中,图片可能保存到了容器内部而不是宿主机目录。注意:相对路径在不同启动方式下会变化,生产环境应使用配置项或绝对路径。
常见问答
我在 PyCharm 运行 Python,图片保存到哪了?
看 PyCharm 运行配置里的 Working directory。plt.savefig('a.png') 会保存到这个目录,不一定是脚本所在目录。最直接的办法是在代码里打印 os.getcwd()。
Jupyter Notebook 里显示出来的图,会自动保存成图片吗?
通常不会。Notebook 输出区显示的是渲染结果,不等于生成了磁盘文件。需要执行 plt.savefig('a.png') 或右键另存显示出来的图片。
plt.savefig(‘a.png’) 为什么找不到文件?
多数情况是当前工作目录和你想象的不一致。运行 print(os.path.abspath('a.png')),这行输出就是实际保存路径。
Pillow 的 image.save(‘output/a.png’) 会自动创建 output 文件夹吗?
不会。保存前需要执行 Path('output').mkdir(parents=True, exist_ok=True),否则目录不存在时会报错。
怎么让所有 Python 图片都固定保存到一个目录?
建议统一定义 output_dir = Path('figures'),程序启动时创建目录,所有 savefig() 或 save() 都使用 output_dir / 文件名。
参考文献
原创文章,作者:王利头,如若转载,请注明出处:https://www.wanglitou.cn/article_16727.html
微信扫一扫