大家好,我是你们的博士学长。如果你已经按上一篇把环境搭好了,那么恭喜你:你已经跨过了“最容易劝退新手”的第一关。
这一篇我们不讲复杂排版,只做一件事——
用最少的代码,画出你的第一张图,并且把它稳稳保存到本地。
很多人学画图卡住不是因为不会画,而是因为:
1.运行能显示,但保存出来是空白/被裁切;
2.保存出来发虚、像截图;
3.文件不知道保存到哪里了;
4.每次改一点都要重来,越改越乱;
……
所以这篇我按“科研最实用”的标准写:先跑通 + 可复制 + 可保存 + 不容易踩坑。
1、先给你 10 行:复制就能跑通并保存
你现在打开PyCharm,新建一个 first_plot.py,把下面这段复制进去:
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 10, 200)
y = np.sin(x)
plt.plot(x, y)
plt.savefig("first_plot.png", dpi=200, bbox_inches="tight")
plt.close()
运行之后,你会在当前目录看到一张图:first_plot.png。
到这一步你已经完成了 80% 的目标:从0到1,能稳定出图。
2、这10行里,最关键的是哪两行?
你以后画任何图,最终都绕不开这两行:
1)plt.savefig(...) —— 你交付成果的核心
这一行决定:图片存在哪、清不清晰、会不会被裁切。
我建议你先记住这个“稳妥组合”:
plt.savefig("xxx.png", dpi=200, bbox_inches="tight")
dpi=200:让图片更清晰(后面我们会讲论文级 600/900/1200)
bbox_inches="tight":自动裁切掉多余白边,避免标题/刻度被截断(但也有坑,后面会专门讲)
2)plt.close() —— 防止你越画越乱
如果你在循环里画多张图、不close,图像对象会越堆越多,出现内存越来越大、后面的图可能叠在一起、Jupyter 里更容易混乱的问题。
所以建议你养成习惯:保存完就close。
3、你最可能踩的 4 个坑
坑1:图能显示,但保存出来是空白
常见于你用了 plt.show() 并且后面才保存。稳妥做法是:
先 savefig 再 show(如果你确实需要 show)
坑2:保存出来发虚,看起来像糊的
大概率是 dpi 太低。你可以先把 dpi=200 改成 dpi=300 试试。
科研常用:
日常检查:200–300
投稿/印刷:600 起步(具体看期刊要求)
坑3:我找不到保存的图片在哪
"first_plot.png" 是相对路径,会保存到你运行脚本的当前目录。
最稳的方式是写绝对路径:
plt.savefig(r"你的路径\first_plot.png", dpi=200, bbox_inches="tight")
坑4:中文标题一加就变成方块/乱码
这是字体问题,新手非常常见。
下一篇我会专门写“中文字体+负号显示”的最稳方案,保证你一次搞定。
4、给你一个“更像科研”的版本:加上标题、坐标轴、网格
当你第一张图能稳定保存后,我们再加一点最常用的“表达元素”,仍然保持短小
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 10, 200)
y = np.sin(x)
plt.figure(figsize=(6, 4))
plt.plot(x, y, linewidth=2)
plt.xlabel("x")
plt.ylabel("sin(x)")
plt.title("My First Figure")
plt.grid(alpha=0.3)
plt.savefig("first_plot_v2.png", dpi=300, bbox_inches="tight")
plt.close()
你会发现:
加了 figsize,你就开始掌控“图的大小”;
加了标签和标题,图就开始“像一张科研图”;
保存用 dpi=300,清晰度明显更好。
第一张图的意义不在于画得多漂亮,而在于你建立了一个稳定的出图闭环——能跑通、能保存、能复用,后面的所有进阶都从这个闭环长出来。