查看全课大纲(第 68 / 101 节)
  1. 1.数据分析基本概念
  2. 2.学习数据分析的一般路线
  3. 3.数据分析的流程
  4. 4.数据类型
  5. 5.环境部署(1)
  6. 6.环境部署(2)
  7. 7.课程介绍
  8. 8.TXT文件操作
  9. 9.JSON文件操作
  10. 10.CSV文件操作
  11. 11.Excel文件操作
  12. 12.数据库及SQL常用语法
  13. 13.数据库基本操作
  14. 14.数据库多表连接
  15. 15.实战:欧洲职业足球数据库分析
  16. 16.爬虫简介
  17. 17.URL管理模块
  18. 18.网页下载模块
  19. 19.网页解析模块(1)
  20. 20.网页解析模块(2)
  21. 21.Scrapy简介
  22. 22.Scrapy使用步骤(1)
  23. 23.Scrapy使用步骤(2)
  24. 24.Scrapy使用步骤(3)
  25. 25.Scrapy使用步骤(4)
  26. 26.实战:获取国内城市空气质量指数数据
  27. 27.NumPy和SciPy介绍
  28. 28.多维数组
  29. 29.多维数组操作
  30. 30.NumPy的常用方法
  31. 31.向量化介绍
  32. 32.向量化及通用函数
  33. 33.实战:2016美国大选分析
  34. 34.数据结构-Series
  35. 35.数据结构-DataFrame
  36. 36.数据结构-Index
  37. 37.Series的索引操作
  38. 38.DataFrame的索引操作
  39. 39.索引操作总结
  40. 40.运算与对齐
  41. 41.函数应用操作(1) -- map
  42. 42.函数应用操作 (2) -- apply applymap
  43. 43.文件读写操作
  44. 44.排序操作
  45. 45.数据清洗--处理缺失数据
  46. 46.数据清洗--处理重复数据
  47. 47.数据清洗--替换数据
  48. 48.常用统计方法(1) -- describe quantile
  49. 49.常用统计方法(2) -- sum mean median count
  50. 50.常用统计方法(3) -- max min idxmax idxmin
  51. 51.常用统计方法(4) -- mad var std cumsum
  52. 52.实战:全球食品数据分析
  53. 53.层级索引
  54. 54.分组与聚合介绍
  55. 55.分组操作(1) -- GroupBy对象及常用聚合操作
  56. 56.分组操作(2) -- 自定义分组及聚合操作
  57. 57.透视表介绍
  58. 58.透视表操作
  59. 59.数据规整(1) -- 数据合并concat
  60. 60.数据规整(2) -- 数据连接merge
  61. 61.数据重构(3) -- 数据重构stack unstack
  62. 62.实战:互联网电影资料库分析
  63. 63.探索性数据分析EDA介绍
  64. 64.EDA的目的
  65. 65.EDA常用工具
  66. 66.Matplotlib绘图基本介绍
  67. 67.Matplotlib画布
  68. 68.散点图和柱状图的绘制
  69. 69.直方图的绘制
  70. 70.矩阵绘图
  71. 71.子图的使用
  72. 72.Matplotlib颜色、标记、线型
  73. 73.Matplotlib坐标刻度、标签、图例、标题
  74. 74.Seaborn介绍
  75. 75.数据集分布可视化(1) -- 单变量分布、双变量分布
  76. 76.数据集分布可视化(2) -- 变量关系可视化
  77. 77.类别数据可视化 -- 类别散布图、类别内数据分布、类别内统计图
  78. 78.交互式数据可视化工具Bokeh介绍
  79. 79.Bokeh绘制散点图、柱状图、盒子图、弦图
  80. 80.Bokeh绘制常用图形元素
  81. 81.3D绘图 -- mplot3d
  82. 82.3D曲线可视化
  83. 83.3D散点图可视化
  84. 84.3D柱状图可视化
  85. 85.Pandas绘图
  86. 86.实战:Lending Club借贷数据探索性分析及可视化
  87. 87.机器学习介绍及应用场景
  88. 88.机器学习建模介绍 (1) -- 分类
  89. 89.机器学习建模介绍 (2) -- 回归
  90. 90.机器学习建模介绍 (3) -- 聚类
  91. 91.机器学习分类
  92. 92.机器学习工具scikit-learn
  93. 93.使用scikit-learn的流程
  94. 94.数据集准备及划分
  95. 95.模型选择
  96. 96.数据预处理及特征工程
  97. 97.过拟合与欠拟合
  98. 98.模型调参介绍
  99. 99.模型调参方法
  100. 100.模型测试及评价
  101. 101.实战:通过移动设备行为数据预测性别和年龄

散点图和柱状图的绘制

约 11 分钟

📺 正在播放小象学院官方高清录播(支持倍速与清晰度调节)

散点图与柱状图的绘制

小象实战讲义 · Python数据分析实战

在数据分析中,可视化是洞察数据关系、分布和趋势的关键步骤。本节我们将学习两种最基础且强大的图表类型:散点图和柱状图。通过Matplotlib库,你将掌握如何将数据点或分类数据直观地转化为图形,并灵活定制其样式。

💡 核心导读

  • 散点图:用于展示两个连续变量之间的关系,通过plt.scatter()函数绘制,可精细控制每个点的位置、大小、颜色和形状。
  • 柱状图:用于比较不同类别数据的数值大小,通过plt.bar()函数绘制,需注意多组数据绘制时的坐标偏移以避免重叠。
  • 参数详解:理解s(大小)、c(颜色)、marker(标记样式)等关键参数,掌握为整组数据或单个点分别配置属性的方法。
  • 多组数据绘制:学会在同一张图中叠加绘制多组数据,并利用颜色和样式的差异进行区分。
  • 实战技巧:通过代码示例,掌握从数据生成到图形美化的完整流程。

散点图:探索变量间的关系

散点图是研究两个连续变量之间关系的利器。在Matplotlib中,我们使用plt.scatter()函数来绘制散点图。其核心参数如下:

  • x, y:分别为数据点的横坐标和纵坐标数组。每个点由一对(x, y)坐标唯一确定。
  • s:点的大小(size)。可以是一个标量(所有点大小相同),也可以是一个长度与数据点数量相同的数组(为每个点指定不同大小)。
  • c:点的颜色(color)。可以是一个颜色字符串(如'r'代表红色),一个颜色列表,或一个数值数组(结合色彩映射)。
  • marker:点的样式(marker)。例如,'o'代表圆圈,'x'代表叉号,'s'代表正方形。

基础散点图绘制

让我们从一个简单的线性关系开始。首先生成一组数据,并绘制其散点图。

import matplotlib.pyplot as plt
import numpy as np

# 生成一组模拟数据:50个随机点,y是x的两倍(线性关系)
np.random.seed(42)  # 固定随机种子,确保结果可复现
x = np.random.randn(50)
y = x * 2

# 绘制散点图
plt.figure(figsize=(6, 4))
plt.scatter(x, y)
plt.title('基础散点图:线性关系')
plt.xlabel('X 值')
plt.ylabel('Y 值')
plt.grid(True, linestyle='--', alpha=0.5)
plt.show()
# 图形显示为一个近似沿直线 y=2x 分布的点集。

绘制多组数据

在实际分析中,我们经常需要比较多组数据。只需多次调用plt.scatter()即可将它们绘制在同一张图中。Matplotlib会自动为不同组的数据分配不同的颜色。

import matplotlib.pyplot as plt
import numpy as np

# 生成两组模拟数据
np.random.seed(42)
x = np.random.randn(50)
y1 = x ** 2  # 抛物线关系
y2 = x * 2   # 线性关系

# 在同一图中绘制两组数据
plt.figure(figsize=(7, 5))
plt.scatter(x, y1)  # 第一组数据,默认颜色
plt.scatter(x, y2)  # 第二组数据,自动分配不同颜色
plt.title('多组数据散点图')
plt.xlabel('X 值')
plt.ylabel('Y 值')
plt.legend(['y = x^2', 'y = 2x'])
plt.grid(True, linestyle='--', alpha=0.5)
plt.show()
# 图形显示为两组不同颜色的点,一组呈抛物线分布,一组呈线性分布。

自定义点的大小、颜色和样式

为了使图表更具表现力,我们可以精细控制每个点的外观。参数s、c、marker在此大显身手。

import matplotlib.pyplot as plt
import numpy as np

# 生成两组模拟数据
np.random.seed(42)
x = np.random.randn(50)
y1 = x ** 2
y2 = x * 2

# 绘制带自定义样式的散点图
plt.figure(figsize=(8, 5))

# 第一组数据:红色叉号,点大小为100
plt.scatter(x, y1, s=100, c='red', marker='x', label='y = x^2 (红色叉号)')

# 第二组数据:绿色正方形,点大小为20
plt.scatter(x, y2, s=20, c='green', marker='s', label='y = 2x (绿色方块)')

plt.title('自定义样式的散点图')
plt.xlabel('X 值')
plt.ylabel('Y 值')
plt.legend()
plt.grid(True, linestyle='--', alpha=0.5)
plt.show()
# 图形显示:红色的大叉号点呈抛物线分布,绿色的小方块点呈线性分布。

关键点解析:

  1. s 和 c 参数接受数组:除了设置统一值,你还可以传入一个长度与数据点数量相同的列表或数组,从而为每个点指定不同的大小或颜色。这在用点的大小表示第三个变量(如人口数量)、用颜色表示第四个变量(如类别)时非常有用。
  2. 颜色与样式参考:
    • 颜色:可以使用简写(如'r', 'g', 'b'),全称(如'red', 'green', 'blue'),或十六进制颜色码(如'#FF5733')。更多颜色名称可参考Matplotlib官方文档。
    • 标记样式:'o'圆圈, '.'点, 'x'叉号, 's'正方形, '^'上三角, 'v'下三角, '+'加号等。具体可查阅Matplotlib的标记样式文档。

柱状图:比较类别数据

柱状图适用于展示和比较不同类别或时间点上的数值数据。在Matplotlib中,使用plt.bar()函数绘制。

  • x:柱子的横坐标位置(通常是类别标签或分组位置)。
  • height:柱子的高度,即要展示的数据值。
  • color:柱子的颜色。

基础柱状图绘制

我们先绘制一组简单的分类数据。

import matplotlib.pyplot as plt

# 定义类别和数据
categories = ['A', 'B', 'C', 'D', 'E']
values = [5, 2, 7, 8, 2]

# 绘制柱状图
plt.figure(figsize=(7, 4))
plt.bar(categories, values, color='skyblue')
plt.title('基础柱状图')
plt.xlabel('类别')
plt.ylabel('数值')
plt.grid(axis='y', linestyle='--', alpha=0.7)
plt.show()
# 图形显示为五个柱子,高度分别为5, 2, 7, 8, 2。

绘制多组柱状图(并排)

当需要比较同一类别下不同分组的数据时,我们需要绘制多组柱状图。关键技巧是为每组柱子设置不同的横坐标,以避免它们完全重叠。

import matplotlib.pyplot as plt
import numpy as np

# 定义基础类别和两组数据
categories = ['产品A', '产品B', '产品C', '产品D', '产品E']
sales_q1 = [5, 2, 7, 8, 2]  # 第一季度销量
sales_q2 = [8, 6, 2, 5, 6]  # 第二季度销量

# 设置柱子的宽度和位置
bar_width = 0.35
x_indexes = np.arange(len(categories))  # 生成位置索引 [0, 1, 2, 3, 4]

# 计算两组柱子的横坐标位置
bars1_x = x_indexes - bar_width/2
bars2_x = x_indexes + bar_width/2

# 绘制并排柱状图
plt.figure(figsize=(9, 5))
plt.bar(bars1_x, sales_q1, width=bar_width, color='tomato', label='第一季度')
plt.bar(bars2_x, sales_q2, width=bar_width, color='lightseagreen', label='第二季度')

plt.title('多组数据并排柱状图:季度销量对比')
plt.xlabel('产品类别')
plt.ylabel('销量')
plt.xticks(x_indexes, categories)  # 将位置索引替换为类别标签
plt.legend()
plt.grid(axis='y', linestyle='--', alpha=0.7)
plt.tight_layout()
plt.show()
# 图形显示为每个类别下有两个并排的柱子,分别代表第一和第二季度的销量,颜色不同。

为什么需要偏移横坐标? 如果直接用相同的x坐标绘制两组plt.bar(),后绘制的柱子会完全覆盖先绘制的柱子,导致只能看到一组数据。通过为每组数据计算一个偏移后的x坐标(如x - 偏移量和x + 偏移量),并配合适当的width(柱子宽度),就能实现清晰的并排显示。偏移量通常取柱子宽度的一半,这样两组柱子能紧密相邻。

📝 动手练一练

  1. 概念辨析:在绘制多组数据的散点图时,如果没有指定颜色(c参数),Matplotlib会如何处理?在绘制多组数据的柱状图时,如果没有手动偏移横坐标,又会发生什么?
👉 点击查看参考答案
  • 散点图:当连续调用plt.scatter()绘制多组数据且未指定颜色时,Matplotlib会自动为每组数据循环使用一组预定义的颜色,以便在图中进行区分。这是一种便捷的默认行为。
  • 柱状图:如果直接用相同的横坐标(x)绘制多组plt.bar(),后绘制的柱子会直接绘制在先绘制的柱子之上,造成视觉上的完全或部分覆盖。用户可能只能看到最后绘制的那组数据,或者看到颜色混合的奇怪效果(如果柱子是半透明的)。因此,必须为每组柱子计算并设置不同的横坐标位置以实现并排显示。
  1. 动手实践:修改“多组数据并排柱状图”的示例代码,尝试添加第三季度的销量数据 sales_q3 = [3, 9, 4, 6, 7],并用第三种颜色(如'gold')将其与第一、第二季度的数据一起绘制成三组并排的柱状图。你需要如何计算第三组柱子的横坐标?
👉 点击查看参考答案
import matplotlib.pyplot as plt
import numpy as np

categories = ['产品A', '产品B', '产品C', '产品D', '产品E']
sales_q1 = [5, 2, 7, 8, 2]
sales_q2 = [8, 6, 2, 5, 6]
sales_q3 = [3, 9, 4, 6, 7]  # 新增第三季度数据

bar_width = 0.25  # 适当调小宽度,为三组柱子留出空间
x_indexes = np.arange(len(categories))

# 计算三组柱子的横坐标
bars1_x = x_indexes - bar_width  # 向左偏移一个完整宽度
bars2_x = x_indexes             # 居中
bars3_x = x_indexes + bar_width  # 向右偏移一个完整宽度

plt.figure(figsize=(10, 6))
plt.bar(bars1_x, sales_q1, width=bar_width, color='tomato', label='第一季度')
plt.bar(bars2_x, sales_q2, width=bar_width, color='lightseagreen', label='第二季度')
plt.bar(bars3_x, sales_q3, width=bar_width, color='gold', label='第三季度')

plt.title('三组数据并排柱状图:季度销量对比')
plt.xlabel('产品类别')
plt.ylabel('销量')
plt.xticks(x_indexes, categories)
plt.legend()
plt.grid(axis='y', linestyle='--', alpha=0.7)
plt.tight_layout()
plt.show()

思路:核心是为每组柱子分配唯一的横坐标位置。一种常见策略是让中间那组柱子以原始类别位置为中心,左右两组的柱子分别向左和向右平移一个bar_width的距离。这样三组柱子就能均匀、清晰地并排显示。

本章小结

本节我们掌握了数据可视化中两种最基础的图表——散点图和柱状图的绘制方法。散点图帮助我们洞察连续变量间的关联、聚类或异常,而柱状图则是比较分类数据大小的标准工具。通过Matplotlib提供的丰富参数,我们可以轻松控制图表的每一个视觉元素,从而制作出既专业又美观的数据图表。

📋 行动清单

  • 练习散点图参数:尝试用一组数据,分别练习将s和c参数设置为标量(统一值)和数组(为每个点设置不同值),观察图形的变化。
  • 复现并排柱状图:自己构造一组包含3个类别、2个分组的模拟数据,手动计算偏移坐标,成功绘制出清晰的并排柱状图。
  • 探索样式库:访问一次Matplotlib官方文档中关于颜色和标记样式的页面,记住3-5个你喜欢的颜色名称和标记符号,以备将来使用。

—— 小象教研组

配套资料 · 直接下载

课件、代码、数据集等配套资料全部免费,点击即可直接下载,无需分享或解锁。

  • 本节课件:散点图和柱状图的绘制
    PDF · 205KB
    下载
  • 全套课件打包(第1-5章)
    ZIP · 12.8MB
    下载
  • 全套课件打包(第6-8章)
    ZIP · 15MB
    下载
  • 实战数据集:AppleStore 应用商城分析
    ZIP · 329KB
    下载
  • 实战数据集:女性服装电商分析
    ZIP · 2.8MB
    下载
  • Python 数据分析环境搭建指南
    PDF · 2MB
    下载
  • Scrapy 安装教程
    PDF · 12.7MB
    下载
  • 附加实战项目:AppleStore 应用商城数据分析
    ZIP · 0.3MB · ipynb + CSV 数据
    下载
  • 附加实战项目:银行电话营销数据分析
    ZIP · 0.4MB · ipynb + CSV 数据
    下载
  • 附加实战项目:女性服装电商评论数据分析
    ZIP · 2.7MB · ipynb + CSV 数据
    下载
  • 附加实战项目:美国化学学会杂志数据分析
    ZIP · 34.2MB · ipynb + SQLite 数据库
    下载