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

如何绘制基于聚类隶属度的colormap散点图实现软聚类可视化

软聚类隶属度混色散点图实现方案

你需要的这类展示跨聚类隶属关系的散点图,核心逻辑是放弃硬分配单一点固定颜色的规则,用每个点在各聚类的隶属度作为权重,对预设的聚类基色做加权混合,得到每个点独有的过渡色,不需要调用预置的连续色卡,就能实现聚类边界自然过渡的效果。

软聚类混色散点图参考效果

具体实现流程

  • 预设聚类基色:根据聚类数量选择对应数量的高区分度RGB基色,比如3聚类就选红、绿、蓝三原色,2聚类选橙、紫这类对比色即可,基色数值统一用0-1范围的RGB值。
  • 逐点计算混色结果:对每个数据点,将它在所有聚类的隶属度(软聚类输出的概率/权重值,单样本所有隶属度和为1)作为权重,和对应聚类的基色做加权求和,直接得到该点的最终RGB颜色值。比如某点在红聚类隶属度0.4、蓝聚类隶属度0.6,最终颜色就是40%红+60%蓝的紫色调,直观体现它介于两个聚类之间的归属状态。
  • 传入散点接口绘图:不需要使用matplotlib内置colormap,直接把所有点计算好的RGB颜色数组传给散点函数的颜色参数,搭配适当的透明度参数解决点重叠遮挡问题即可。

可直接复用的参考代码

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs
from sklearn.mixture import GaussianMixture

# 生成测试数据集
X, _ = make_blobs(n_samples=1600, centers=3, cluster_std=1.9, random_state=42)

# 执行软聚类,GMM可直接输出每个样本对应各聚类的隶属度概率
gmm = GaussianMixture(n_components=3, random_state=42)
gmm.fit(X)
membership = gmm.predict_proba(X)  # 输出维度为(样本数, 聚类数),每行隶属度和为1

# 定义3个聚类对应的RGB基色(数值范围0-1)
base_colors = np.array([
    [1.0, 0.25, 0.2],  # 聚类0:红色
    [0.2, 0.95, 0.3],  # 聚类1:绿色
    [0.25, 0.4, 1.0]   # 聚类2:蓝色
])

# 矩阵乘法批量计算所有样本点的混色结果,比逐点循环效率高很多
point_colors = membership @ base_colors

# 绘制最终散点图
plt.figure(figsize=(8, 6), dpi=130)
plt.scatter(X[:, 0], X[:, 1], c=point_colors, s=16, alpha=0.7)
plt.axis('off')
plt.show()

效果调优技巧

  • 如果觉得聚类边界的过渡色太淡、区分度不够,可以对隶属度做幂次变换强化权重差:比如将隶属度替换为membership ** 1.6后重新做行归一化(保证每行和为1),再计算混色。幂次越高,点的颜色越接近所属概率最高聚类的纯色,越接近硬聚类效果;幂次越低,颜色过渡越柔和。
  • 点密度过高时可以把alpha参数调到0.3~0.5,重叠区域颜色会自然加深,同时还能体现数据的密度分布。
  • 需要添加图例时,直接用对应基色创建自定义色块即可,不需要从散点中提取颜色。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.09 16:15:43