折线图适合展示趋势,但散点图能揭示关系。
想象你在分析"学习时长 vs 考试成绩"——用折线图连接每个学生的数据毫无意义,但散点图一眼就能看出:学越久,分越高吗?有没有异常值?
这就是散点图的威力:发现规律、识别异常、探索关联。
scatter() 参数全解析plt.scatter(x, y, s=None, c=None, marker=None, cmap=None,alpha=None, linewidths=None, edgecolors=None)

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()

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 = 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()

# 第一组数据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()

# 设置随机种子,保证可复现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()


# 查看所有可用 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) = 三维数据一图呈现
