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

Julia中对字典数据做UMAP降维后如何给散点图添加字典键标签

操作步骤

核心问题是你在将字典转为矩阵时,没有保留矩阵列和原字典ID的对应关系,只要固定ID和矩阵列的匹配顺序,再调用Plots的标注参数即可实现需求,具体修改如下:

  1. 构造矩阵时固定ID顺序
    因为Julia原生Dict是无序结构,必须在拼接矩阵时同步记录每一列对应的ID,避免后续标签错位:
# 替换your_dict为你实际的字典变量名
id_list = collect(keys(your_dict))
# 严格按照id_list的顺序拼接向量为矩阵,每一列对应一个ID的特征向量
mat = hcat([your_dict[id] for id in id_list]...)

注意:如果你已经提前生成好了mat,必须找到生成mat时对应的ID顺序,不能重新调用keys(your_dict)获取id_list,否则Dict遍历顺序变化会导致标签和点完全不匹配。

  1. 原有UMAP降维代码无需修改,保持原有逻辑即可:
embedding = umap(mat, 2; n_neighbors=15, min_dist=0.001, n_epochs=200)
println(size(embedding))
  1. 修改绘图代码,添加ID标签和散点颜色区分
    使用Plots的series_annotations参数添加点标签,通过marker_z参数实现散点按ID区分颜色:
using Plots

scatter(
    embedding[1, :], embedding[2, :],
    # 按ID数值映射散点颜色,不需要分色可以删除该行
    marker_z = id_list,
    # 每个散点下方标注对应ID,8为字号,可按需调整
    series_annotations = text.(string.(id_list), 8, :bottom),
    legend = false,
    xlabel = "UMAP维度1",
    ylabel = "UMAP维度2"
)
可选调整
  • 如果觉得全量标签过于密集,可以自定义要显示的标签数组替换series_annotations的传入值,仅标注需要关注的ID
  • 如果不想用渐变色区分点,可以传入自定义颜色数组给markercolor参数,实现固定配色
  • 调整text()的位置参数(比如:top、:left)可以修改标签相对于散点的位置,避免遮挡

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 16:57:19