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

Python绘制交互式UMAP图时如何显示类别颜色图例

UMAP交互式绘图添加类别图例实现方案

umap.plot.interactive() 接口默认不会像静态绘图接口那样自动渲染图例,你当前代码还存在参数传参问题:把唯一值的sampleID传给了做颜色编码的labels参数,这种情况下就算生成图例,也会每个样本对应一个图例项,完全没有可读性。
结合你给出的表结构(第一列样本ID、第二列样本类别、其余为特征),直接调整参数、开启图例配置即可实现需求,不需要重写整体绘图逻辑。

修正后可直接运行的代码

import umap
import umap.plot
import pandas as pd
import numpy as np

# 拟合UMAP模型,保留原有特征选择逻辑
mapper = umap.UMAP(n_neighbors=50, min_dist=0.5).fit(pretrained_df.iloc[:,2:130])

# 配置悬停展示数据:仅保留需要查看的样本ID
hover_data = pd.DataFrame({
    'index': np.arange(len(pretrained_df)),
    'sampleID': pretrained_df.iloc[:, 0]
})

umap.plot.output_notebook()

# 核心修正:labels传入类别列,新增legend参数指定图例位置
p = umap.plot.interactive(
    mapper,
    labels=pretrained_df.iloc[:, 1],  # 第二列为样本类别,用于颜色编码
    hover_data=hover_data,
    theme='fire',
    point_size=2,  # 适当调大点大小方便鼠标悬停选中
    legend='top_right'  # 指定图例渲染位置,支持传入'top_left'/'bottom_right'等位置参数
)

# 可选:调整图例交互和样式
p.legend.title = '样本类别'
p.legend.click_policy = 'hide'  # 点击图例类别可临时隐藏/显示对应类别的点
p.legend.label_text_font_size = '10pt'

umap.plot.show(p)

注意事项

  • 如果你使用的umap-learn版本低于0.5,没有内置legend参数,因为接口底层返回的是标准Bokeh绘图对象,你可以直接通过Bokeh的Legend组件手动添加图例,逻辑和普通Bokeh绘图加图例完全一致。
  • 不建议用sampleID作为颜色编码的标签传入,样本量稍大时不仅图例完全不可用,颜色映射也会出现大量重复辨识度极低,类别字段做颜色编码、悬停看样本ID是更合理的交互逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 08:27:19