📊 阅读时长: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 篇。关注我,不错过后续更新。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐