当前位置:首页>python>一起学Python第110天:散点图用气泡图让数据"开口说话"

一起学Python第110天:散点图用气泡图让数据"开口说话"

  • 2026-10-11 06:18:15
一起学Python第110天:散点图用气泡图让数据"开口说话"
📅 系列:一起学Python | 难度:⭐⭐⭐ | 预计阅读:6分钟
🔗 上期回顾:第109天:多子图布局

一、为什么散点图比折线图更"高级"?

折线图适合展示趋势,但散点图能揭示关系。

想象你在分析"学习时长 vs 考试成绩"——用折线图连接每个学生的数据毫无意义,但散点图一眼就能看出:学越久,分越高吗?有没有异常值?

这就是散点图的威力:发现规律、识别异常、探索关联。

二、核心 API:scatter() 参数全解析

plt.scatter(x, y, s=None, c=None, marker=None, cmap=None,             alpha=None, linewidths=None, edgecolors=None)

三、从入门到精通:5个实战示例

示例 1:基础散点图(入门)

import numpy as npimport matplotlib.pyplot as pltimport matplotlib.font_manager as fmimport os# ================= 1. 字体加载(解决报错的核心) =================font_path = "simhei.ttf"  # 确保你已经在当前目录上传了 simhei.ttfif not os.path.exists(font_path):    font_path = "/usr/share/fonts/truetype/wqy/wqy-zenhei.ttc"  # 备用系统字体prop = fm.FontProperties(fname=font_path)plt.rcParams['axes.unicode_minus'] = False# 数据x = np.array([1, 2, 3, 4, 5, 6, 7, 8])y = np.array([1, 4, 9, 16, 7, 11, 23, 18])plt.figure(figsize=(8, 6))plt.scatter(x, y, s=100, color='#2E86AB', edgecolors='white', linewidths=1.5)plt.title('基础散点图', fontproperties=prop, fontsize=16)plt.xlabel('X 轴', fontproperties=prop)plt.ylabel('Y 轴', fontproperties=prop)plt.grid(True, alpha=0.3, linestyle='--')plt.show()

示例 2:气泡图——大小代表第三维度

x = np.array([1, 2, 3, 4, 5, 6, 7, 8])y = np.array([1, 4, 9, 16, 7, 11, 23, 18])sizes = np.array([20, 50, 100, 200, 500, 1000, 60, 90])  # 点的大小数组plt.figure(figsize=(8, 6))plt.scatter(x, y, s=sizes, color='#E74C3C', alpha=0.7, edgecolors='white')plt.title('气泡图:大小代表权重', fontproperties=prop, fontsize=16)plt.xlabel('X 轴', fontproperties=prop)plt.ylabel('Y 轴', fontproperties=prop)plt.grid(True, alpha=0.3)plt.show()
💡 应用场景:电商分析中,X=价格,Y=销量,气泡大小=利润率,一图三维度!

示例 3:彩色散点图——颜色代表分类/数值

x = np.array([1, 2, 3, 4, 5, 6, 7, 8])y = np.array([1, 4, 9, 16, 7, 11, 23, 18])colors = np.array(["red", "green", "black", "orange",                    "purple", "beige", "cyan", "magenta"])plt.figure(figsize=(8, 6))plt.scatter(x, y, c=colors, s=150, edgecolors='white', linewidths=1.5)plt.title('自定义颜色散点图', fontproperties=prop, fontsize=16)plt.xlabel('X 轴', fontproperties=prop)plt.ylabel('Y 轴', fontproperties=prop)plt.show()

示例 4:双组数据对比——叠加散点图

# 第一组数据x1 = np.array([5, 7, 8, 7, 2, 17, 2, 9, 4, 11, 12, 9, 6])y1 = np.array([99, 86, 87, 88, 111, 86, 103, 87, 94, 78, 77, 85, 86])# 第二组数据x2 = np.array([2, 2, 8, 1, 15, 8, 12, 9, 7, 3, 11, 4, 7, 14, 12])y2 = np.array([100, 105, 84, 105, 90, 99, 90, 95, 94, 100, 79, 112, 91, 80, 85])plt.figure(figsize=(10, 7))plt.scatter(x1, y1, color='#FF6B6B', s=80, alpha=0.7,             label='A组产品', edgecolors='white')plt.scatter(x2, y2, color='#4ECDC4', s=80, alpha=0.7,             label='B组产品', edgecolors='white')plt.title('两组产品性能对比', fontproperties=prop, fontsize=16)plt.xlabel('测试次数', fontproperties=prop)plt.ylabel('得分', fontproperties=prop)plt.legend(prop=prop, loc='upper right')plt.grid(True, alpha=0.3, linestyle='--')plt.show()

示例 5:高级气泡图——颜色映射 + 颜色条(终极版)

# 设置随机种子,保证可复现np.random.seed(42)N = 50x = np.random.rand(N)          # 0~1 随机数y = np.random.rand(N)          # 0~1 随机数colors = np.random.rand(N)      # 颜色映射值 0~1area = (30 * np.random.rand(N)) ** 2  # 气泡面积 0~900plt.figure(figsize=(10, 8))scatter = plt.scatter(x, y,                       s=area,           # 大小                      c=colors,         # 颜色映射                      cmap='viridis',   # 颜色映射表                      alpha=0.6,        # 透明度                      edgecolors='white',                       linewidths=1.5)# 添加颜色条cbar = plt.colorbar(scatter)cbar.set_label('颜色映射值', fontproperties=prop)plt.title('高级气泡图:大小 × 颜色 × 位置 = 三维数据',           fontproperties=prop, fontsize=14)plt.xlabel('X 维度', fontproperties=prop)plt.ylabel('Y 维度', fontproperties=prop)plt.show()

四、Colormap 颜色映射表速查

# 查看所有可用 colormapprint(plt.colormaps())

五、避坑指南

六、参数速查卡

# 基础散点plt.scatter(x, y)# 气泡图plt.scatter(x, y, s=sizes, c=colors, cmap='viridis', alpha=0.6)# 带颜色条scatter = plt.scatter(x, y, c=colors, cmap='viridis')plt.colorbar(scatter)# 双组对比plt.scatter(x1, y1, label='A组')plt.scatter(x2, y2, label='B组')plt.legend()

七、总结

今天我们掌握了 Matplotlib 散点图的核心技能:

  • ✅ plt.scatter() —— 基础散点,探索数据关系

  • ✅ s 参数 —— 气泡图,增加"大小"维度

  • ✅ c + cmap —— 颜色映射,增加"颜色"维度

  • ✅ plt.colorbar() —— 颜色条,解读颜色含义

  • ✅ alpha + edgecolors —— 美化,解决重叠、增加立体感

关键记忆:散点图 = 位置(X,Y) + 大小(S) + 颜色(C) = 三维数据一图呈现

🎯 今日金句:折线图告诉你"发生了什么",散点图告诉你"为什么发生"——而气泡图,则让数据拥有了重量和温度。

最新文章

随机文章