当前位置:首页>python>用Python做科研级画图——散点图基础模板

用Python做科研级画图——散点图基础模板

  • 2026-10-11 08:09:38
用Python做科研级画图——散点图基础模板

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

如果说前面的内容都在讲“分布”,那从这一篇开始,我们进入一个更核心的能力:关系表达(relationship)。

而散点图,是所有关系类图表的起点。

但我可以很直接地说一句,80%的散点图,都有一个问题——看不清。

为什么?

点太多 → 全部叠在一起

点太密 → 看不出结构

点太黑 → 像一团墨

所以这一篇,我们只解决一个问题:如何让散点图“既完整,又清晰”?

01.散点图最常见的问题:遮挡(overplotting)

当数据量稍微大一点(>1000),就会出现:

点完全重叠

局部密度看不出来

趋势被淹没

这叫:overplotting(过度绘制)

而解决这个问题的核心方法,其实只有两个:

透明度(alpha)

抖动 / 控制点大小

02.透明度:最重要的一招

散点图的第一优化手段,是降低透明度。

alpha = 0.3 ~ 0.6

效果:重叠区域 → 更深

  稀疏区域 → 更浅

于是就会出现,数据的“密度结构”自动浮现出来。

03.点大小(size):不要乱设

很多人会把点设得很大,这是错误的。原则上:点越多,要越小。

数据量
推荐 size
< 200
30–60
200–2000
10–30
> 2000
2–10

04.不要画网格

干净底图 > 信息堆叠

散点图本身已经有很多视觉信息,再加网格,很容易干扰判断。

05.论文级散点图模板

散点图不是在展示“点”,而是在展示“密度”。

这是论文级散点图模板:

import osimport numpy as npimport matplotlib as mplimport matplotlib.pyplot as pltfrom matplotlib import font_manager as fmfrom matplotlib.ticker import MaxNLocatorwin_fonts = r"C:\Windows\Fonts"for p in [    os.path.join(win_fonts,"times.ttf"),    os.path.join(win_fonts,"timesbd.ttf"),    os.path.join(win_fonts,"timesi.ttf"),    os.path.join(win_fonts,"simsun.ttc"),]:if os.path.exists(p):        try:            fm.fontManager.addfont(p)        except Exception:            passmpl.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)# =========================# 构造数据# =========================np.random.seed(42)x = np.random.normal(0, 1, 1500)y = 0.5 * x + np.random.normal(0, 0.5, 1500)# =========================# 绘图# =========================fig, ax = plt.subplots(figsize=(6,5))ax.scatter(    x,y,    s=12, #点大小    alpha=0.35, #透明度    color="#4C78A8")ax.set_title("Scatter Plot / 散点图", fontsize=14)ax.set_xlabel("X Variable / 自变量", fontsize=12)ax.set_ylabel("Y Variable / 因变量", fontsize=12)ax.xaxis.set_major_locator(MaxNLocator(nbins=6))ax.yaxis.set_major_locator(MaxNLocator(nbins=6))for spine in ax.spines.values():      spine.set_linewidth(1.2)out_path = os.path.join(OUT_DIR, "scatter_basic.jpg")fig.savefig(out_path, dpi=300, bbox_inches="tight")plt.close()print("Saved:", out_path)

还可以加一条趋势线:

coef = np.polyfit(x, y, 1)trend = np.poly1d(coef)ax.plot(x, trend(x), color="red", linewidth=2)

06.什么时候散点图不够用了?

当你开始遇到:

多个类别

多个组

多种条件

你就需要分组散点。

也就是,不同颜色、不同形状、分类编码。

散点图的核心不是把点画出来,而是让结构被看见。

接下来我们升级散点图,《分组散点》。

当数据有多个类别时:

颜色怎么选?

形状怎么用?

怎么避免图变乱?

下一篇,我会给你一套,论文级分组编码规则。

这一步,是从“会画图”走向“会表达数据结构”的关键。

——期待你的关注—— 

往期内容:

用Python做科研级画图——异常值可视化

用Python做科研级画图——雨云图

用Python做科研级画图——小提琴图

用Python做科研级画图——箱线图(解释统计含义)

用Python做科研级画图——KDE密度

用Python做科研级画图——直方图

最新文章

随机文章