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

大规模数据7000个聚类的可区分颜色可视化实现问题

7000聚类可视化颜色区分可行方案

首先明确一个基础前提:人眼可稳定区分的高对比度离散颜色最多只有20-30种,强行生成7000种独特色码放到散点图中,混叠后必然无法识别,核心解决思路是放弃「全量聚类一次性用颜色区分」的需求,改用分层、交互、语义映射的方案:


方案1:分层着色+交互高亮

  • 优先统计所有聚类的样本规模,给TOP 30~50个最大的核心聚类,调用seaborn.color_palette('husl', n_colors=N)生成高对比度独特色赋值
  • 剩余规模极小的聚类统一分配低饱和度的浅灰色,避免干扰核心聚类的识别
  • 新增可视化交互逻辑:鼠标hover/点击某一个聚类时,将该聚类所有点调整为高饱和高亮色,其余所有聚类点调整为半透明暗灰色,可清晰查看任意聚类的分布范围

方案2:基于聚类语义的色彩映射

放弃随机生成颜色的逻辑,改用高维特征关联的HSL色彩空间映射,既保证色彩辨识度,还能额外传递聚类关联信息:

  • 色相(H)维度:将7000个聚类中心的第一主成分值,线性映射到0~360°的色相范围,语义相似的聚类会被分配相近的色相,符合认知逻辑
  • 饱和度(S)维度:映射聚类的样本规模,样本量越大的聚类饱和度越高,越容易被注意到
  • 亮度(L)维度:可固定为0.5避免过亮/过暗,也可以映射聚类的离散程度
  • 代码示例:
import colorsys
import numpy as np
from sklearn.decomposition import PCA
from sklearn.preprocessing import MinMaxScaler

# 入参说明:cluster_centers为7000个聚类的中心向量,cluster_sizes为每个聚类的样本量
# 映射色相
pca_1d = PCA(n_components=1)
h_val = pca_1d.fit_transform(cluster_centers).flatten()
h_val = MinMaxScaler(feature_range=(0, 1)).fit_transform(h_val.reshape(-1, 1)).flatten()
# 映射饱和度
s_val = MinMaxScaler(feature_range=(0.3, 0.9)).fit_transform(cluster_sizes.reshape(-1, 1)).flatten()
# 固定亮度
l_val = np.full(len(cluster_centers), 0.5)
# 生成RGB色值
cluster_color_list = [colorsys.hls_to_rgb(h, l, s) for h, s, l in zip(h_val, s_val, l_val)]

方案3:层级下钻可视化

不需要在全局画布中一次性展示所有50万样本+7000聚类,改为双层可视化结构:

  • 顶层概览页:用面积大小代表聚类规模的矩形树图/散点聚合图,每个聚类仅展示1个代表点,无需展示所有样本
  • 下钻详情页:点击顶层任意聚类后,仅展示该聚类的所有样本分布,如需和其他聚类对比可支持多选叠加展示

方案4:补充非颜色区分标识

除了颜色外,额外增加可视化标识降低区分难度:

  • 对TOP 10核心聚类,除独特色外额外分配不同的标记形状(圆形、三角形、方形等)
  • 用matplotlib.pyplot.contourf为每个聚类的分布范围绘制半透明的填充轮廓线,就算内部点颜色接近,轮廓也可清晰划分聚类边界

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 21:36:01