MCM520 ← 资料站首页 图表选择可视化指南:散点图:看关系与分布(深度版) 打开交互阅读器 →

图表选择可视化指南:散点图:看关系与分布(深度版)

展示两个连续变量的相关/分布关系,发现线性、非线性、离群点。

分类:📈 基础图 适用:相关性分析、拟合前后对比、聚类前的分布观察

一、这个图适合谁(适用场景)

  • 相关性分析
  • 拟合前后对比
  • 聚类前的分布观察

二、图表结构要素

  1. X/Y 均为连续量
  2. 点大小/颜色可编码第三维
  3. 可叠加拟合线

三、可视化的底层逻辑

散点图用"二维位置"这一双高精度通道,同时编码两个连续变量的联合分布,是发现关系结构(线性、非线性、聚类、离群)最直接、信息密度最高的工具。叠加拟合线后,它进一步变成"关系假设的视觉检验"——肉眼就能判断线性相关强弱、是否存在非线性拐弯、是否有异常点拉动趋势。颜色/大小作为"预注意属性"可编码第三维而不增加认知负担。核心思想:位置通道同时承载 X 与 Y,把"相关吗、怎么相关、有没有例外"三件事一次性交给读者;但务必记住——散点揭示的是关联而非因果,斜率被离群点拉动时会严重误导,需配合残差诊断。

四、视觉编码与感知推导

线性相关量化:皮尔逊相关系数

r=∑i(xi−xˉ)(yi−yˉ)∑i(xi−xˉ)2∑i(yi−yˉ)2∈[−1,1] r=\frac{\sum_i(x_i-\bar x)(y_i-\bar y)}{\sqrt{\sum_i(x_i-\bar x)^2}\sqrt{\sum_i(y_i-\bar y)^2}}\in[-1,1]

rr 只捕捉线性关系;非线性结构(如抛物线)的 rr 可能接近 0 却绝非无关——这正是必须看散点形状而非只报 rr 的原因。

最小二乘拟合:叠加线的斜率

b=Cov(x,y)Var(x),y^=a+bx b=\frac{\text{Cov}(x,y)}{\text{Var}(x)},\qquad \hat y=a+bx

残差 ei=yi−(a+bxi)e_i=y_i-(a+bx_i),其分布形态(是否随 xx 变大)用于检验模型假设。

过绘制(overplotting)控制:当样本量 nn 大、点密度 dd 高,用透明度 α\alpha 使局部叠加可被感知:

可见密度∝n⋅α \text{可见密度}\propto n\cdot\alpha

α\alpha 应随 nn 减小(如 α=1/n\alpha=1/\sqrt{n} 量级),避免所有点糊成一块,丢失分布结构。

离群影响:OLS 对离群敏感(残差平方被放大);Cook 距离 DiD_i 大的点会剧烈拉动 (a,b)(a,b),须单独标注并决定"保留/剔除/用稳健回归"。

五、怎么画(步骤)

  1. 两个变量都连续才用散点。
  2. 加拟合线(线性/loess)直观看趋势。
  3. 用颜色/大小表达分组或第三变量。
  4. 标注离群点并解释(是真异常还是数据错)。
  5. 大样本用透明度避免重叠成块。

六、何时用 / 何时不用 / 常见丑图

  • 何时用:『X 和 Y 有没有关系』『分布啥样』。
  • 何时不用:一维分布 → 直方图;类别对比 → 柱状。
  • 常见丑图:点全黑重叠、无拟合线、坐标轴无单位。

七、常见坑

  • 把相关当因果
  • 大样本不透明重叠
  • 忽略离群点

八、画图自检清单

  • 两变量连续
  • 有拟合/趋势线
  • 分组编码清晰
  • 离群已解释

九、配套资源与搭配

  • 预测类问题怎么选方法
  • Python 数据可视化模板
  • 分类与聚类怎么选

本指南由 MCM520 资料站自动生成(深度版),配套论文图表规范与可视化模板可在资源页下载。

十、实战案例——Python 绘制 + 图效果

散点图最擅长展示两个连续变量之间的关系。

案例场景:某城市 15 个样本的房屋面积与成交价格数据。
从散点图可以直观看出——面积越大房价越高(正相关),且是否呈线性。

完整代码(Python + matplotlib)

import matplotlib.pyplot as plt

area = [60, 65, 70, 75, 80, 85, 90, 95, 100, 105, 110, 115, 120, 125, 130]
price = [72, 78, 85, 90, 98, 105, 112, 120, 128, 135, 142, 150, 158, 165, 172]

plt.figure(figsize=(8, 4))
plt.scatter(area, price, color='#2563eb', s=60, alpha=0.7, edgecolors='white', linewidth=1)

# 加回归线
import numpy as np
z = np.polyfit(area, price, 1)
p = np.poly1d(z)
x_line = np.linspace(55, 135, 100)
plt.plot(x_line, p(x_line), '--', color='#dc2626', linewidth=2, alpha=0.6, label='线性回归线')

plt.xlabel('面积 /㎡', fontsize=12)
plt.ylabel('房价 /万', fontsize=12)
plt.title('房价与面积散点图', fontsize=14, fontweight='bold')
plt.legend(fontsize=11)
plt.grid(alpha=0.3)
plt.tight_layout()
plt.show()

运行效果图

图X3  房价与面积散点图


本指南由 MCM520 资料站生成,配套 Python 代码可直接运行。