Skip to content

图谱视图高级分析

Obsidian 的图谱视图不仅是一个可视化工具,更是知识网络分析利器。本文介绍如何通过高级过滤、分组和布局设置,从图谱中获取更深层次的洞察。

图谱视图基础回顾

如果你还不熟悉图谱视图的基本操作,请先阅读 图谱视图 基础教程。

图谱的核心元素

元素说明可配置项
节点每篇笔记大小、颜色、透明度
笔记间的链接厚度、颜色、箭头
相关笔记的集合分组方式
节点间的作用力引力、斥力、中心力

高级过滤

按路径过滤

# 过滤面板(Filter)中输入:

# 仅显示特定文件夹
path:projects/

# 排除特定文件夹
-path:templates/ -path:archive/

# 多路径组合
path:projects/ OR path:tasks/

按标签过滤

# 包含特定标签
#tag:urgent

# 排除特定标签
-#tag:archived

# 多标签组合(AND)
#tag:project #tag:active

# 多标签组合(OR)
#tag:project OR #tag:task

按链接数过滤

虽然图谱界面没有直接的"链接数"过滤器,但可以通过以下方式间接实现:

  1. 使用 Dataview 先标记高链接笔记
  2. 在笔记中添加 hub: true 属性
  3. 在图谱中过滤 [hub]: true

分组与着色

按文件夹着色

在图谱设置 → Groups 中添加颜色规则:

# 按顶层文件夹分组
path:projects/ → 蓝色 #3b82f6
path:books/ → 绿色 #22c55e
path:daily/ → 橙色 #f59e0b
path:notes/ → 紫色 #a855f7
path:templates/ → 灰色 #6b7280(透明度降低)

按标签着色

# 按标签分组
#tag:urgent → 红色 #ef4444
#tag:important → 橙色 #f97316
#tag:idea → 黄色 #eab308
#tag:reference → 青色 #06b6d4

按属性着色

结合 Properties 系统,按笔记属性着色:

# 在 Groups 中使用属性查询
[status: active] → 绿色
[status: paused] → 黄色
[status: done] → 灰色(降低透明度)
[status: archived] → 深灰色(最低透明度)

布局参数调优

力导向布局参数

参数作用推荐值效果
中心力将节点拉向中心1-3值越大越聚拢
链接力连接节点的力30-100值越大连接越紧密
斥力节点间排斥力100-500值越大间距越大
链接距离连接线的长度50-200值越大越松散

不同场景的推荐参数

整体概览(大图谱)

  • 中心力:1
  • 链接力:30
  • 斥力:300
  • 链接距离:100

项目聚焦(中等图谱)

  • 中心力:2
  • 链接力:50
  • 斥力:200
  • 链接距离:80

单篇笔记关联(小图谱)

  • 中心力:5
  • 链接力:80
  • 斥力:100
  • 链接距离:60

数据分析技巧

使用 Dataview 辅助分析

1. 找出枢纽节点

dataview
TABLE 
  length(file.inlinks) as "入链数",
  length(file.outlinks) as "出链数",
  length(file.inlinks) + length(file.outlinks) as "总链接数"
FROM ""
WHERE file.folder != "Templates"
SORT length(file.inlinks) + length(file.outlinks) DESC
LIMIT 20

2. 发现孤岛笔记

dataview
LIST
FROM ""
WHERE length(file.inlinks) = 0 AND length(file.outlinks) = 0
AND file.folder != "Templates"
AND file.folder != "Archive"

3. 找出最强连接对

dataviewjs
const pages = dv.pages().where(p => p.file.folder != "Templates");
const connections = [];

for (let p of pages) {
  for (let link of p.file.outlinks) {
    const target = dv.pages().where(t => t.file.path == link.path);
    if (target.length > 0) {
      const mutualBacklinks = target[0].file.outlinks
        .filter(l => l.path == p.file.path).length;
      if (mutualBacklinks > 0) {
        connections.push({
          a: p.file.name,
          b: target[0].file.name,
          strength: mutualBacklinks + 1
        });
      }
    }
  }
}

connections.sort((a, b) => b.strength - a.strength);

dv.header(3, "🔗 最强连接对 Top 10");
dv.table(
  ["笔记 A", "笔记 B", "连接强度"],
  connections.slice(0, 10).map(c => [c.a, c.b, "⭐".repeat(c.strength)])
);

4. 知识簇分析

dataviewjs
// 检测知识簇(共享大量链接的笔记群)
const pages = dv.pages()
  .where(p => p.file.folder != "Templates" && p.file.folder != "Archive");

// 构建邻接表
const adjacency = {};
for (let p of pages) {
  adjacency[p.file.path] = p.file.outlinks.map(l => l.path);
}

// 找出共享链接最多的笔记对
const sharedLinks = {};
for (let i = 0; i < pages.length; i++) {
  for (let j = i + 1; j < pages.length; j++) {
    const a = pages[i].file.path;
    const b = pages[j].file.path;
    const aLinks = new Set(adjacency[a] || []);
    const bLinks = new Set(adjacency[b] || []);
    
    // 共同链接的笔记
    const common = [...aLinks].filter(l => bLinks.has(l));
    if (common.length >= 3) {
      const key = `${pages[i].file.name} ↔ ${pages[j].file.name}`;
      sharedLinks[key] = common.length;
    }
  }
}

const sorted = Object.entries(sharedLinks)
  .sort((a, b) => b[1] - a[1])
  .slice(0, 10);

if (sorted.length > 0) {
  dv.header(3, "🌐 知识簇分析(共享 ≥3 个链接的笔记对)");
  dv.table(
    ["笔记对", "共享链接数"],
    sorted
  );
} else {
  dv.paragraph("未发现强知识簇");
}

图谱可视化最佳实践

1. 分层展示

# 第一层:核心节点(高度链接的笔记)
node_size: based_on_links
min_node_size: 8
max_node_size: 30

# 第二层:标签着色
color: based_on_tag

# 第三层:路径过滤(聚焦当前工作区)
filter: path:current-project/

2. 时间动画

利用图谱的时间过滤功能:

  1. 打开图谱视图
  2. 拖动时间滑块到最左端
  3. 缓慢拖动滑块向右
  4. 观察知识网络随时间的增长

这可以帮助你发现:

  • 知识爆发期(某段时间大量新笔记)
  • 连接形成期(某段时间大量新链接)
  • 知识荒漠期(某段时间无活动)

3. 局部图谱分析

在单篇笔记的「局部图谱」中:

# 过滤出最相关的笔记
深度:2(显示 2 层链接关系)
过滤:排除 templates/ 和 archive/
排序:按链接数降序

图谱驱动的知识管理策略

策略 1:连接优先

定期检查图谱,优先关注连接稀疏的区域:

dataviewjs
// 找出链接数最少的笔记(需要补充连接)
const sparse = dv.pages()
  .where(p => p.file.folder != "Templates" && p.file.folder != "Archive")
  .map(p => ({
    name: p.file.name,
    totalLinks: p.file.inlinks.length + p.file.outlinks.length
  }))
  .sort((a, b) => a.totalLinks - b.totalLinks)
  .slice(0, 15);

dv.header(3, "🔍 链接最少的笔记(建议补充连接)");
dv.table(
  ["笔记", "总链接数", "建议"],
  sparse.map(s => [
    s.name,
    s.totalLinks,
    s.totalLinks === 0 ? "🔴 孤岛笔记,急需连接" : "🟡 链接稀少,考虑补充"
  ])
);

策略 2:枢纽维护

识别并维护知识枢纽节点:

dataview
TABLE 
  length(file.inlinks) as "入链",
  length(file.outlinks) as "出链"
FROM ""
WHERE length(file.inlinks) >= 10
SORT length(file.inlinks) DESC
LIMIT 10

策略 3:主题聚类

通过图谱颜色分组识别主题边界,检查:

  • 主题内连接是否紧密
  • 主题间是否有足够的桥接笔记
  • 是否有孤立的主题簇

图谱性能优化

大型知识库(1000+ 笔记)的图谱可能卡顿,优化方法:

优化方法操作效果
减少渲染节点设置过滤条件显著提升
降低链接距离减少链接距离参数减少计算量
关闭箭头设置 → 显示箭头 → 关闭微提升
降低帧率使用更简单的力模型提升流畅度
分区域查看使用路径过滤分段查看避免全量渲染

相关文档