大家好,我是你们的小帅学长。
如果说前面的内容都在讲“分布”,那从这一篇开始,我们进入一个更核心的能力:关系表达(relationship)。
而散点图,是所有关系类图表的起点。
但我可以很直接地说一句,80%的散点图,都有一个问题——看不清。
为什么?
点太多 → 全部叠在一起
点太密 → 看不出结构
点太黑 → 像一团墨
所以这一篇,我们只解决一个问题:如何让散点图“既完整,又清晰”?
01.散点图最常见的问题:遮挡(overplotting)
当数据量稍微大一点(>1000),就会出现:
点完全重叠
局部密度看不出来
趋势被淹没
这叫:overplotting(过度绘制)
而解决这个问题的核心方法,其实只有两个:
透明度(alpha)
抖动 / 控制点大小
02.透明度:最重要的一招
散点图的第一优化手段,是降低透明度。
效果:重叠区域 → 更深
稀疏区域 → 更浅
于是就会出现,数据的“密度结构”自动浮现出来。
03.点大小(size):不要乱设
很多人会把点设得很大,这是错误的。原则上:点越多,要越小。
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做科研级画图——直方图