You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Matplotlib散点图如何在指定网格区域添加自定义分层

Matplotlib 完全可以实现自定义区间分层标注的需求,不需要引入额外第三方库,核心是通过矩形补丁绘制分区背景、再在对应位置添加分区文本即可。

实现要点

  • 先修正原代码的显性问题:原代码调用sc.legend_elements()时没有定义sc变量,需要把ax.scatter()的返回值赋值给sc才能正常生成聚类图例
  • 导入Rectangle补丁类,针对每个分层的x、y取值范围绘制半透明背景块,设置较低透明度避免遮挡散点数据
  • 用ax.text()在每个分区的居中位置添加分层名称,设置较高的图层优先级保证文字显示在最上层
  • 所有自定义分区添加完成后,再执行图例渲染、网格配置、绘图显示的逻辑即可

修改后可直接复用的代码

import matplotlib.pyplot as plt
from matplotlib.patches import Rectangle

# Define Data
x = result.iloc[:,6] #R Score
y = result.iloc[:,11] #FM Score
z = result['cluster_label'] # 替换为实际使用的聚类标签列
 
# Create Figure
fig, ax = plt.subplots(figsize=(8,6))
ax.set_ylabel('frequency & monetary score')
ax.set_xlabel('recency score')
# 补全sc变量赋值,解决原代码图例报错问题
sc = ax.scatter(x, y,c=z, cmap='viridis', alpha=0.5)

# ========== 自定义分层核心配置 ==========
# 分层规则格式:(x轴最小值, x轴最大值, y轴最小值, y轴最大值, 分层名称, 分区色块颜色)
segment_rules = [
    (4, 5, 6, 10, 'Champions', '#ff7f0e'),
    # 新增分层直接按格式在下方追加即可,示例:
    # (3, 4, 6, 10, 'Loyal Customers', '#2ca02c'),
    # (0, 2, 0, 3, 'Hibernating', '#d62728')
]

for xmin, xmax, ymin, ymax, seg_name, color in segment_rules:
    # 绘制分区半透明背景
    rect = Rectangle(
        (xmin, ymin), # 矩形左下角坐标
        xmax - xmin,  # 矩形宽度
        ymax - ymin,  # 矩形高度
        color=color,
        alpha=0.2, # 透明度,数值越小色块越浅
        zorder=0 # 图层顺序设为0,保证色块在散点、网格下方
    )
    ax.add_patch(rect)
    # 在分区中心位置添加分层名称文本
    ax.text(
        (xmin + xmax)/2, # 文本x坐标:区间中点
        (ymin + ymax)/2, # 文本y坐标:区间中点
        seg_name,
        fontsize=10,
        ha='center', va='center', # 文本水平、垂直居中对齐
        zorder=10 # 图层优先级设高,保证文字不被其他元素遮挡
    )
# ========== 自定义分层配置结束 ==========

ax.legend(*sc.legend_elements(), title="CLUSTER",loc='lower center', 
          bbox_to_anchor=(0.5, 1.05),ncol=5, fancybox=True, shadow=True)
ax.grid(True, zorder=-1) # 网格图层放到最下方,避免盖住分区色块
# 固定坐标轴范围,避免矩形补丁导致坐标轴自动缩放超出得分区间
ax.set_xlim(0, 5) # 按实际R分范围调整,常规RFM模型R分区间为1-5
ax.set_ylim(0, 10) # 按实际FM分范围调整,常规RFM模型FM分区间为1-10
plt.tight_layout()
plt.show()

调整说明

  • 如果不需要分区背景色块,只保留文字标注,直接删掉循环里绘制Rectangle的代码段即可
  • 色块透明度、颜色、文字大小都可以根据可视化需求修改对应参数
  • 追加新分层只需要在segment_rules列表里按格式新增元组,不需要重复编写绘图逻辑

注意:如果你的R得分、FM得分取值范围不是常规的1-5/1-10,记得同步修改set_xlim、set_ylim的参数,以及每个分层的坐标范围,保证分区和实际业务规则对齐。

内容的提问来源于stack exchange,提问作者galih

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 16:48:18