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

Plotly单细胞UMAP散点图:消除重复图例,实现簇唯一标记

解决Plotly单细胞UMAP散点图图例重复问题

核心问题是绘图时未按cluster分组,导致每个数据点都生成了图例项。只需让每个cluster对应单独的绘图轨迹,就能确保图例仅显示唯一的簇编号。

方法1:使用Plotly Graph Objects手动遍历簇

这种方式灵活性高,可自定义每个簇的颜色和符号:

import plotly.graph_objects as go
import pandas as pd

# 从adata提取UMAP坐标和簇信息,转为DataFrame
df = pd.DataFrame({
    "UMAP_1": adata.obsm["X_umap"][:, 0],
    "UMAP_2": adata.obsm["X_umap"][:, 1],
    "cluster": adata.obs["cluster"].astype(str)  # 转为字符串避免连续变量识别问题
})

# 自定义颜色和符号映射(可根据簇数量扩展)
color_palette = ["#1f77b4", "#ff7f0e", "#2ca02c", "#d62728", "#9467bd", "#8c564b"]
symbol_list = ["circle", "square", "diamond", "cross", "x", "triangle-up"]

fig = go.Figure()

# 遍历每个簇,添加独立散点轨迹
for idx, cluster_id in enumerate(df["cluster"].unique()):
    cluster_data = df[df["cluster"] == cluster_id]
    fig.add_trace(go.Scatter(
        x=cluster_data["UMAP_1"],
        y=cluster_data["UMAP_2"],
        mode="markers",
        marker=dict(
            color=color_palette[idx % len(color_palette)],
            symbol=symbol_list[idx % len(symbol_list)],
            size=5
        ),
        name=cluster_id,  # 图例显示的簇编号,每个簇仅出现一次
        showlegend=True
    ))

# 调整图表布局
fig.update_layout(
    title="UMAP 簇分布散点图",
    xaxis_title="UMAP 1",
    yaxis_title="UMAP 2",
    legend_title="簇编号"
)

fig.show()

方法2:使用Plotly Express快速分组

Plotly Express会自动按簇分组,默认生成唯一图例,代码更简洁:

import plotly.express as px
import pandas as pd

# 转换adata数据为DataFrame
df = pd.DataFrame({
    "UMAP_1": adata.obsm["X_umap"][:, 0],
    "UMAP_2": adata.obsm["X_umap"][:, 1],
    "cluster": adata.obs["cluster"].astype(str)
})

# 一键生成带唯一图例的UMAP图
fig = px.scatter(
    df,
    x="UMAP_1",
    y="UMAP_2",
    color="cluster",
    symbol="cluster",
    color_discrete_sequence=px.colors.qualitative.D3,  # 内置定性配色
    symbol_sequence=["circle", "square", "diamond", "cross"],
    labels={"cluster": "簇编号"},
    title="UMAP 簇分布散点图"
)

# 调整点大小和图例样式
fig.update_traces(marker=dict(size=5))
fig.update_layout(legend_title="簇编号")

fig.show()

关键注意事项

  • 务必将cluster列转为字符串类型:如果簇编号是数值,Plotly可能会将其识别为连续变量,导致图例异常。
  • 自定义颜色/符号时,若簇数量超过列表长度,用%循环复用即可,避免索引越界。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 07:35:17