Python散点图(Scatter Plot):数据探索的“第一张图表”

打印 上一主题 下一主题

主题 983|帖子 983|积分 2949

在数据可视化范畴,散点图是一种强大而灵活的工具,它能够帮助我们直观地理解和探索数据会合变量之间的关系。本文将深入探讨散点图的核心原理、应用场景以及如何利用Python举行高效绘制。
后续几篇将先容高级技巧、复杂应用场景。
Python散点图(Scatter Plot):高阶分析、散点图矩阵、三维散点图及综合应用
Python散点图多变量数据可视化:金融、市场、医学等应用的深度剖析
Python散点密度图:数据可视化的强大工具
一、散点图的核心原理

散点图通过在二维坐标系中绘制数据点来展示两个变量之间的关系。每个点代表一个观测值,其横纵坐标分别对应两个变量的取值。通过观察这些点的分布模式,我们可以得出变量之间是否存在相关性、是否存在异常值以及数据的分布形态等重要信息。
散点图通过在笛卡尔坐标系中绘制点集,展示两个变量的数值关系。每个点的位置由变量值决定,常用于发现变量间的相关性(正相关、负相关或无关联)、是否存在异常值、数据分布模式(如线性、非线性、离群值)。
关键要素


  • 坐标轴映射:横轴和纵轴分别对应两个不同的变量,数据点的位置由这两个变量的值决定。
  • 数据点样式:可以通过颜色、大小和外形等属性对数据点举行编码,以表示额外的变量信息。
  • 趋势线拟合:回归线、注释文本、置信区间等加强分析深度(如seaborn.regplot自动添加回归线)。
二、散点图的应用场景

1. 数据分析与探索



  • 相关性分析:验证假设(如广告投入与销售额的关系)。
  • 聚类辨认:发现数据中的自然分组(如用户分群)。
  • 异常值检测:定位偏离主要分布的异常点(如金融敲诈检测)。
  • 分析数据分布:散点图可以揭示数据的分布形态,例如是否呈现对称分布、偏态分布等。这对于后续的数据分析和建模具有重要意义,由于不同的分布形态可能需要采用不同的统计方法和模型。
2. 科研与可视化



  • 生物学:分析基因表达量与疾病风险的关系。
  • 气象学:研究温度与降水量的分布模式。
  • 社会科学:探索收入程度与教导程度的相关性。
3. 机器学习



  • 特性工程:观察特性与目标变量的关系(如房价预测中的面积与代价)。
  • 分类边界可视化:展示分类算法在高维空间的决策边界。
三、利用Python绘制散点图

底子散点图

  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. # 生成数据
  4. np.random.seed(0)
  5. x = np.random.rand(50)
  6. y = np.random.rand(50)
  7. # 绘制散点图
  8. plt.figure(figsize=(8, 6))
  9. plt.scatter(x, y, color='blue', alpha=0.7)
  10. plt.title('基础散点图')
  11. plt.xlabel('X轴')
  12. plt.ylabel('Y轴')
  13. plt.grid(True, linestyle='--', alpha=0.7)
  14. plt.show()
复制代码

带回归线的散点图

  1. import seaborn as sns
  2. from scipy import stats
  3. # 使用seaborn加载示例数据集
  4. tips = sns.load_dataset("tips")
  5. # 绘制带回归线的散点图
  6. sns.lmplot(x="total_bill", y="tip", data=tips, height=6, aspect=1.5)
  7. plt.title('带回归线的散点图')
  8. plt.show()
复制代码

分组散点图

  1. # 生成分组数据
  2. categories = ['A', 'B', 'C']
  3. np.random.seed(0)
  4. x = np.random.rand(50)
  5. y = np.random.rand(50)
  6. group = np.random.choice(categories, 50)
  7. # 绘制分组散点图
  8. plt.figure(figsize=(8, 6))
  9. for category in categories:
  10.     plt.scatter(x[group == category], y[group == category], label=category, alpha=0.7)
  11. plt.title('分组散点图')
  12. plt.xlabel('X轴')
  13. plt.ylabel('Y轴')
  14. plt.legend()
  15. plt.grid(True, linestyle='--', alpha=0.7)
  16. plt.show()
复制代码

四、散点图的美化与优化

调整数据点样式

  1. # 生成数据
  2. np.random.seed(0)
  3. x = np.random.rand(50)
  4. y = np.random.rand(50)
  5. sizes = np.random.rand(50) * 100  # 数据点大小
  6. colors = np.random.rand(50)       # 数据点颜色
  7. # 绘制带大小和颜色编码的散点图
  8. plt.figure(figsize=(8, 6))
  9. scatter = plt.scatter(x, y, s=sizes, c=colors, cmap='viridis', alpha=0.7)
  10. plt.title('带大小和颜色编码的散点图')
  11. plt.xlabel('X轴')
  12. plt.ylabel('Y轴')
  13. plt.colorbar(scatter, label='颜色强度')
  14. plt.grid(True, linestyle='--', alpha=0.7)
  15. plt.show()
复制代码

添加注释和参考线

  1. # 生成数据
  2. np.random.seed(0)
  3. x = np.random.rand(50)
  4. y = np.random.rand(50)
  5. # 绘制散点图并添加注释和参考线
  6. plt.figure(figsize=(8, 6))
  7. scatter = plt.scatter(x, y, color='blue', alpha=0.7)
  8. # 添加注释
  9. for i, (xi, yi) in enumerate(zip(x, y)):
  10.     if i % 5 == 0:  # 仅标注部分点
  11.         plt.text(xi, yi, f'Point {i}', fontsize=8, color='red')
  12. # 添加参考线
  13. plt.axhline(y=0.5, color='green', linestyle='--', alpha=0.7, label='Y=0.5')
  14. plt.axvline(x=0.5, color='red', linestyle='--', alpha=0.7, label='X=0.5')
  15. plt.title('带注释和参考线的散点图')
  16. plt.xlabel('X轴')
  17. plt.ylabel('Y轴')
  18. plt.legend()
  19. plt.grid(True, linestyle='--', alpha=0.7)
  20. plt.show()
复制代码

五、多工具结合:复杂分析可结合箱线图或热力图

在实际的数据分析中,单一的散点图可能无法完全揭示数据的全貌。为了举行更深入的分析,我们可以将散点图与其他可视化工具结合利用。
结合箱线图

箱线图可以提供数据的分布特性,如中位数、四分位数、异常值等。将散点图与箱线图结合,可以更全面地理解数据的分布环境。
  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. # 生成数据
  4. np.random.seed(0)
  5. data = np.random.randn(100, 4)
  6. # 绘制箱线图
  7. plt.figure(figsize=(10, 6))
  8. plt.boxplot(data, patch_artist=True, boxprops=dict(facecolor='lightblue'))
  9. plt.title('箱线图')
  10. plt.xlabel('组别')
  11. plt.ylabel('值')
  12. plt.grid(True, linestyle='--', alpha=0.7)
  13. plt.show()
  14. # 绘制散点图
  15. plt.figure(figsize=(8, 6))
  16. for i in range(data.shape[1]):
  17.     plt.scatter(np.full(data.shape[0], i+1), data[:, i], alpha=0.7, label=f'组 {i+1}')
  18. plt.title('散点图')
  19. plt.xlabel('组别')
  20. plt.ylabel('值')
  21. plt.legend()
  22. plt.grid(True, linestyle='--', alpha=0.7)
  23. plt.show()
复制代码


结合热力图

热力图可以直观地展示高维数据中变量之间的关系。将散点图与热力图结合,可以更全面地理解数据的模式和趋势。
  1. import seaborn as sns
  2. import numpy as np
  3. # 生成数据
  4. np.random.seed(0)
  5. data = np.random.randn(10, 10)
  6. # 绘制热力图
  7. plt.figure(figsize=(10, 8))
  8. sns.heatmap(data, cmap='viridis', annot=True, fmt='.2f')
  9. plt.title('热力图')
  10. plt.xlabel('列')
  11. plt.ylabel('行')
  12. plt.show()
  13. # 绘制散点图
  14. plt.figure(figsize=(8, 6))
  15. for i in range(data.shape[0]):
  16.     plt.scatter(range(data.shape[1]), data[i, :], alpha=0.7, label=f'行 {i+1}')
  17. plt.title('散点图')
  18. plt.xlabel('列')
  19. plt.ylabel('值')
  20. plt.legend()
  21. plt.grid(True, linestyle='--', alpha=0.7)
  22. plt.show()
复制代码


六、注意事项


  • 数据清洗:剔除缺失值,制止无效点干扰分析。
  • 制止过分解读:相关性不代表因果关系(如冰淇淋销量与溺水事故的虚伪相关)。
  • 参数调优:点的大小和颜色需平衡信息量与可读性。
  • 多工具结合:复杂分析可结合箱线图(探索分布)或热力图(高维扩展)。
七、性能优化建议


  • 大数据处理:当数据量较大时,可以采用抽样或聚合的方式减少数据点数量,进步绘图效率。
  • 交互式可视化:对于需要交互探索的场景,可以利用Plotly等库实现交互式散点图,支持缩放、悬停显示具体信息等功能。
  • 并行计算:在处理大规模数据集时,可以利用并行计算技能加速数据处理和绘图过程。
结语

散点图是数据探索的“第一张图表”,其简洁性和信息密度使其成为分析变量关系的首选工具。通过公道运用Python中的Matplotlib、Seaborn等库,我们可以轻松绘制出各种类型的散点图,从而深入发掘数据背后隐蔽的关系和规律。盼望本文的先容能够帮助读者更好地理解和应用散点图,在数据可视化的门路上更进一步。如能结合Python的快速原型、R的统计深化、D3.js的动态交互,掌握散点图的多维度应用,更能够明显提升数据分析效率与洞察深度。

后续几篇将先容高级技巧、复杂应用场景。欢迎持续关注:
Python散点图(Scatter Plot):高阶分析、散点图矩阵、三维散点图及综合应用
Python散点图多变量数据可视化:金融、市场、医学等应用的深度剖析
Python散点密度图:数据可视化的强大工具


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

慢吞云雾缓吐愁

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表