当前位置:首页>python>用Python做科研级画图——标注与强调:箭头/框/高亮怎么用

用Python做科研级画图——标注与强调:箭头/框/高亮怎么用

  • 2026-09-08 04:34:08
用Python做科研级画图——标注与强调:箭头/框/高亮怎么用

大家好,我是你们的小帅学长。

如果你已经跟着上一期把图例和刻度做到了“少而清楚”,那你现在的图大概率已经不乱了。但论文图真正打动审稿人的,是你能不能让他“3秒抓到关键结论”。

“标注与强调”就是你在图上做的那一下“导演动作”:用最少的文字、最克制的视觉手段,把读者的眼睛牵到关键点。

这一篇我会把标注拆成三种最常用、也最容易用错的工具:

箭头(arrow):告诉读者“看这里”

框(box/rectangle):圈出区域、对比局部

高亮(highlight):把重点从背景里拉出来

01.先给原则:标注不是“加信息”,是“减少读者搜索成本”

标注的目的不是把图写成段落,而是让读者/审稿人不用找:

错误标注:越标越乱,像在图上贴便利贴

正确标注:读者几乎不用思考,就明白你要表达什么

一些心得:

一般只标 1–3 个点;每个标注只回答一个问题。

(看哪里?是什么?为什么重要?最多回答其中一个)

02.箭头:用来“指向”,不是用来“解释”

1)什么时候用箭头最合适?

你要指向一个具体点(峰值、转折点、异常点)

你要指向一个局部位置(某段突然上升/下降)

2)箭头最常见的 3 个错误

箭头太长、穿过大量数据 → 视觉噪声

箭头太粗太黑 → 抢走主体

一张图 7 个箭头 → 读者/审稿人直接放弃

3)箭头的“克制写法”

箭头短一点

线宽细一点

注释离目标近一点

文本尽量短(2–6 个字或一个短词)

03.框:用来“圈区域”,最适合做局部对比

1)什么时候用框?

你想强调某个区域(如某段时间、某个值域)

你想做“局部放大”(配合 inset 小窗)

你想说明“这个差异集中在这里”

2)框的最佳实践

用空心框(只画边,不填充),避免盖住数据

框颜色不要太跳(让主体仍然是数据)

框的边线要细,保持克制

04.高亮:用来“让重点跳出来”,但千万别全高亮

高亮本质上是视觉权重控制。最常用的方式有三种:

重点线条加粗/加深,其余线条淡化(alpha 变小)

重点点位加大加描边

背景区域轻微着色(透明填充),暗示关注区间

高亮的关键是:

你只高亮一个主角,剩下都是配角。

否则所有东西都亮,就等于都没亮。

05.直接上手:一套“箭头+框+高亮”示范模板

下面这段代码做了三件事:

用高亮把主曲线“拉出来”

用箭头标注关键峰值

用框圈出一个“关注区间”

import osimport numpy as npimport matplotlib as mplimport matplotlib.pyplot as pltfrom matplotlib import font_manager as fmfrom matplotlib.patches import Rectangle# == 字体 ==fm.fontManager.addfont(r"C:\Windows\Fonts\times.ttf")fm.fontManager.addfont(r"C:\Windows\Fonts\simsun.ttc")mpl.rcParams["font.family"] = ["Times New Roman", "SimSun"]mpl.rcParams["axes.unicode_minus"] = FalseOUT_DIR = r"D:\py_figs"os.makedirs(OUT_DIR, exist_ok=True)# == 数据 ==x = np.linspace(0, 10, 200)y_main = np.sin(x) + 0.08 * np.random.randn(len(x))y_bg1 = np.sin(x) + 0.25 y_bg2 = np.sin(x) - 0.25fig, ax = plt.subplots(figsize=(6, 4))# == 1) 背景曲线淡化 ==ax.plot(x, y_bg1, linewidth=1.2, alpha=0.25, label="_nolegend_")ax.plot(x, y_bg2, linewidth=1.2, alpha=0.25, label="_nolegend_")# == 2) 主曲线高a高亮 ==ax.plot(x, y_main, linewidth=2.6, label="Main / 主曲线")# == 3) 框:圈出关注区间(空心框更稳)==x1, x2 = 3.2, 5.0ymin, ymax = -1.6, 1.6rect = Rectangle((x1, ymin), x2 - x1, ymax - ymin,                fill=False, linewidth=1.3)ax.add_patch(rect)# == 4) 箭头:标注关键点(峰值)==idx = np.argmax(y_main)xp, yp = x[idx], y_main[idx]ax.scatter([xp], [yp], s=45)ax.annotate("Peak/ 峰值", xy=(xp, yp),    xytext=(xp + 1.0, yp + 0.25),   arrowprops=dict(arrowstyle="->", lw=1.0),    fontsize=11,)# == 基础排版 ==ax.set_title("标注与强调示例:箭头 / 框 / 高亮", fontsize=14)ax.set_xlabel("Time (day) / 时间(天)", fontsize=12)ax.set_ylabel("Value / 数值", fontsize=12)ax.grid(alpha=0.25)ax.legend(frameon=False, loc="upper left")fig.savefig(os.path.join(OUT_DIR, "annotate_highlight_demo.jpg"),            dpi=300, bbox_inches="tight")plt.close(fig)

标注与强调的本质,是你替读者/审稿人做“视线导航”——箭头指点、框圈范围、高亮提权,只要克制使用,读者/审稿人就会在3秒内看到你真正的结论。

下一篇我会把这一系列收束成一份可直接对照的工具:《论文级排版检查清单(Checklist)》。到那一篇你基本可以把“论文出图”当成流程来做:每张图按清单过一遍,几乎不再返工。

——期待你的关注—— 

往期内容:

用Python做科研级画图——配色与色带:连续离散怎么选

用Python做科研级画图——工具选型:Matplotlib、Seaborn、Plotly、Altair怎么选

最新文章

随机文章