【Python系列课程】Matplotlib(三):常见图表——散点图、条形图、热力图
·
📊 阅读时长:14分钟 | 关键词:Matplotlib、scatter散点图、bar条形图、imshow热力图、数据可视化
引言
前两篇掌握了基础绘图的"底层操作"——plot、坐标轴、图例。这篇直接上三种最常用的实战图表,每种都有独立的应用场景,学完立马能用。
一、plt.scatter() 散点图
场景:看两个变量之间的关系——身高和体重、广告费与销售额、温度与用电量。
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 从正态分布中抽样,模拟两组数据
x1 = np.random.normal(0, 1, 100)
y1 = np.random.normal(0, 1, 100)
x2 = np.random.normal(0, 1, 100)
y2 = np.random.normal(0, 1, 100)
# 第一组:绿色菱形,半透明
plt.scatter(x1, y1, s=90, c='green', marker='D',
alpha=0.2, linewidths=2, edgecolors='red')
# 第二组:黄色菱形,不透明
plt.scatter(x2, y2, s=90, c='yellow', marker='D',
alpha=0.8, linewidths=2, edgecolors='black')
plt.show()
参数速查:
| 参数 | 说明 | 示例 |
|---|---|---|
x, y |
数据点坐标(形状为 (n,) 的数组) | x=[1,2,3], y=[4,5,6] |
s |
标记点的大小(数字) | 90 |
c |
标记点的颜色 | 'green', '#FF0000' |
marker |
标记样式 | 'o' 圆, 'D' 菱形, '^' 三角 |
alpha |
透明度(0~1) | 0.5 → 半透明 |
linewidths |
标记边框线宽 | 2 |
edgecolors |
标记边框颜色 | 'red' |
💡
alpha是散点图的灵魂参数——点多时设半透明,重叠区域的深浅一眼就能看出聚集效果。
二、plt.bar() 条形图
场景:对比分类数据——各部门业绩、各城市人口、各月销量。
2.1 基础条形图
x = np.arange(1, 11) # x 坐标 1~10
h1 = np.random.randint(20, 35, 10) # 随机生成 10 个高度(20~35)
h2 = np.random.randint(15, 40, 10) # 第二组
plt.figure()
plt.bar(x, +h1, bottom=0.5) # 向上的条形,底边从 0.5 开始
plt.bar(x, -h2, bottom=-0.5) # 向下的条形(负值),底边从 -0.5 开始
# 在条形上方标数值
for i in range(len(x)):
plt.text(x[i], h1[i]+0.5, h1[i], ha='center')
plt.text(x[i], -h2[i]-0.5, h2[i], va='top', ha='center')
plt.yticks(ticks=range(-40, 31, 10), labels=[40, 30, 20, 10, 0, 10, 20, 30])
plt.show()
2.2 调整条形宽度与对齐
plt.figure()
x = np.arange(1, 25, 2.5) # 间距较大
h1 = np.random.randint(20, 35, 10)
h2 = np.random.randint(15, 40, 10)
plt.bar(x, h1, align='edge') # 条形左对齐刻度
plt.bar(x - 0.4, h2) # 第二组向左偏移 0.4,并排显示
for i in range(len(x)):
plt.text(x[i]+0.4, h1[i], h1[i], size=8, ha='center')
plt.text(x[i]-0.4, h2[i], h2[i], size=8, ha='center')
plt.xticks(ticks=x)
plt.show()
💡 两组条形并排的经典做法:一组
align='edge',另一组 x 坐标减掉半个宽度。
参数速查:
| 参数 | 说明 | 默认值 |
|---|---|---|
x |
条形 x 坐标 | - |
height |
条形高度 | - |
width |
条形宽度 | 0.8 |
color |
条形颜色 | - |
edgecolor |
条形边框颜色 | - |
alpha |
透明度 | 1 |
linewidth |
边框线宽 | - |
bottom |
底边起始 y 坐标 | 0 |
align |
对齐方式 | 'center'(居中)/ 'edge'(左对齐) |
三、plt.imshow() 数据转图像
场景:热力图——相关性矩阵、图像数据、二维数组信息的可视化。
plt.figure()
# 自己造一个 3×3 的图像数据(像素值 0-255 看起来才正常,这里只是演示)
data = np.array([[0, 50, 200],
[200, 100, 0],
[0, 150, 200]])
plt.imshow(data)
plt.show()
# 灰度模式
plt.imshow(data, cmap="Greys")
# 灰度 + 半透明
plt.imshow(data, cmap="Greys", alpha=0.3)
真实应用——相关性热力图:
# 构造一个 5×5 的相关性矩阵
corr = np.random.rand(5, 5)
plt.figure(figsize=(6, 5))
plt.imshow(corr, cmap='hot', interpolation='nearest')
plt.colorbar() # 添加颜色条
plt.title('相关性矩阵热力图')
plt.show()
参数速查:
| 参数 | 说明 | 示例 |
|---|---|---|
X |
图像数据(二维 = 灰度,三维 = RGB) | np.array([[0,50],[200,100]]) |
cmap |
颜色映射 | 'hot', 'Greys', 'viridis', 'coolwarm' |
alpha |
透明度 | 0.5 |
interpolation |
插值方式 | 'nearest'(块状), 'bilinear'(平滑) |
小结
| 图表类型 | 函数 | 典型场景 |
|---|---|---|
| 散点图 | plt.scatter() |
看两个变量之间的关系 |
| 条形图 | plt.bar() |
分类对比(不同类别、不同时间) |
| 热力图 | plt.imshow() |
矩阵数据可视化(相关性、图像) |
这三种图 + 前面的折线图,覆盖了日常数据可视化 80% 的需求。
下一篇文章,我们学最后一招——在一个画布上排布多个子图(subplot)、画图中图(axes),以及把画好的图保存到文件。
本文是「Python从入门到数据分析」系列的第 21 篇。关注我,不错过后续更新。
更多推荐

所有评论(0)