当前位置:首页>python>用Python做科研级画图——分组散点的编码策略

用Python做科研级画图——分组散点的编码策略

  • 2026-10-11 07:57:50
用Python做科研级画图——分组散点的编码策略

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

上一期我们讲了散点图最核心的问题:遮挡,以及如何用透明度解决。但一旦你的数据不再是“单一变量关系”,而是:多个模型、多种类型、多个类别

问题就升级了,如何在一张散点图里表达“分类信息”?

很多人第一反应是:上颜色

然后结果是:颜色乱、图例难看、类别分不清

所以这一篇,我们讲清楚一个关键能力:分组散点的编码策略(Encoding Strategy)

01.分组散点的本质

分组散点不是“多画几种颜色”,而是“设计信息编码”。

我们常用的编码方式有三种:

编码方式
表达
颜色(color)
类别区分
形状(marker)
辅助区分
大小(size)
数值大小

但注意:一张图里不要滥用所有编码。

02.最重要原则:控制编码维度

核心原则:最多使用 2 种视觉编码

推荐组合:颜色 + 形状(最常用)

      颜色 + 大小(数量型)

不推荐:  颜色 + 形状 + 大小(容易炸图)

03.颜色编码:怎么选才像论文?

1.类别 ≤ 5:可以直接用颜色

推荐:蓝 / 橙 / 绿 / 红 / 紫(经典组合)

避免:相近色(浅蓝 vs 深蓝)

  高饱和荧光色

2.类别 > 5:颜色不够用

           这时候必须:引入“形状编码”

04.形状编码:什么时候用?

当你出现,类别多或需要黑白打印时,形状就很重要。

常见 marker:圆、方、三角、菱形、叉

颜色是第一层区分,形状是第二层保险。

05.论文级分组散点模板

分组散点的本质不是“多颜色”,而是“让类别结构被看见”。下面是一段可以直接复用的模版:

import osimport numpy as npimport matplotlib as mplimport matplotlib.pyplot as pltfrom matplotlib import font_manager as fm# =========================# 字体设置# =========================win_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"] = False# =========================# 输出路径# =========================OUT_DIR = r"D:\py_figs"os.makedirs(OUT_DIR, exist_ok=True)# =========================# 构造数据# =========================np.random.seed(42)n = 500x1 = np.random.normal(0, 1, n)y1 = x1 + np.random.normal(0, 0.5, n)x2 = np.random.normal(2, 1, n)y2 = 0.5 * x2 + np.random.normal(0, 0.5, n)x3 = np.random.normal(-2, 1, n)y3 = -0.8 * x3 + np.random.normal(0, 0.5, n)# =========================# 绘图# =========================fig, ax = plt.subplots(figsize=(6,5))ax.scatter(x1, y1, s=12, alpha=0.4, color="#4C78A8", marker='o', label="Group A / 组A")ax.scatter(x2, y2, s=12, alpha=0.4, color="#F58518", marker='s', label="Group B / 组B")ax.scatter(x3, y3, s=12, alpha=0.4, color="#54A24B", marker='^', label="Group C / 组C")ax.set_title("Grouped Scatter Plot / 分组散点图", fontsize=14)ax.set_xlabel("X Variable / 自变量", fontsize=12)ax.set_ylabel("Y Variable / 因变量", fontsize=12)ax.legend(frameon=False)for spine in ax.spines.values():spine.set_linewidth(1.2)# =========================# 保存# =========================out_path = os.path.join(OUT_DIR, "grouped_scatter.jpg")fig.savefig(out_path, dpi=300, bbox_inches="tight")plt.close()print("Saved:", out_path)

常见错误:颜色过多(>6)、颜色太接近、marker 太复杂、点太大导致遮挡、图例太长

好的分组散点,不是让图更复杂,而是让结构更清晰。

到这里,我们已经会画散点、处理遮挡、表达分组。但还有一个问题:如何表达变量之间的“关系趋势”?

也就是:《回归拟合线》

下一篇我会讲:什么时候用线性回归、什么时候用非线性、怎么画“论文级拟合线”、怎么避免“假趋势”

这一篇,会直接提升你的分析表达能力。

——期待你的关注—— 

往期内容:

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

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

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

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

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

最新文章

随机文章