gravio-la/force-graph-demo
GitHub: gravio-la/force-graph-demo
一款支持 3D、Cosmo、2D 三种渲染模式的交互式力导向图可视化应用,用于探索和展示复杂关系网络。
Stars: 1 | Forks: 0
# Force Graph Explorer (3D & 2D)
一款全屏交互式力导向图可视化应用程序,支持**双重可视化模式**:3D 和 2D。基于 React、Bun、Three.js 和 Sigma.js 构建。
## 功能特性
- **三种可视化模式(3D、Cosmo、2D)**
- 🎲 **3D 力导向图** – 使用 `3d-force-graph` 和 Three.js 进行交互式 3D 探索
- 🌐 **Cosmo** – 使用 Cosmograph 实现 GPU 加速的图形视图
- 🔗 **2D 网络图** – 使用 Sigma.js 和 Graphology 的平面网络视图
- 通过底部中央的切换按钮随时切换模式 – 所有视图保持同步
- **多图形管理**
- 📊 在独立的 JSON 文件中存储多个图形
- 🔄 使用下拉选择器(左上角)在图形之间切换
- 📝 每个图形都有元数据(名称、描述、时间戳)
- ✏️ 通过应用内模态框(YAML 编辑器)添加和编辑自定义图形
- 🆕 包含随时可用的空白图形模板
- **交互元素**
- 点击节点查看详细信息
- 实时搜索和过滤节点
- 永久显示的节点和边标签
- 流畅的动画和过渡效果
- **UI 组件**
- 图形选择器下拉菜单(左上角)
- 可展开的搜索覆盖层(右上角)
- 节点信息面板(搜索框下方)
- 可视化模式切换按钮(底部中央)
- 所有覆盖层均具有背景模糊和现代风格
- **状态管理**
- 使用 Zustand store 进行全局状态管理
- 持久化的图形数据结构
- 跨视图同步搜索和选择
## 技术栈
- **运行时**: Bun
- **框架**: React 19
- **样式**: Tailwind CSS 4 + shadcn/ui
- **3D 可视化**: 3d-force-graph + Three.js
- **Cosmo 可视化**: Cosmograph (@cosmograph/react)
- **2D 可视化**: Sigma.js + Graphology
- **状态管理**: Zustand
- **UI 组件**: Radix UI (通过 shadcn)、CodeMirror (YAML 图形编辑器)
## 快速开始
```
# 安装依赖
bun install
# 启动开发 server
bun run dev
# 为生产环境 Build
bun run build
# 启动生产 server
bun run start
```
## 项目结构
```
src/
├── components/
│ ├── ForceGraph3D.tsx # 3D force graph visualization
│ ├── CosmographGraph.tsx # Cosmo (Cosmograph) visualization
│ ├── SigmaGraph.tsx # 2D network graph visualization
│ ├── SearchOverlay.tsx # Search and filter UI
│ ├── NodeInfoOverlay.tsx # Node details panel
│ ├── VisualizationToggle.tsx # 3D / Cosmo / 2D mode switch
│ ├── GraphSelector.tsx # Multi-graph dropdown selector
│ ├── GraphEditorModal.tsx # Add/edit graphs (YAML)
│ └── ui/ # shadcn components
├── lib/
│ ├── groupColors.ts # Central node group color palette
│ └── utils.ts # Utilities
├── data/
│ ├── consciousness_graph.json # Default graph – philosophy of mind
│ ├── philosophical-concepts.json # Steiner's philosophy graph
│ ├── system-architecture.json # System architecture example
│ └── empty-graph.json # Empty template graph
├── store/
│ └── graphStore.ts # Zustand state management
├── types/
│ ├── 3d-force-graph.d.ts # TypeScript definitions
│ └── json.d.ts # JSON module declarations
├── App.tsx # Main application
└── index.tsx # Server entry point
```
## 图形数据
图形以 JSON 文件形式存储在 `src/data/` 目录中。每个文件包含:
- **元数据**:名称、描述、时间戳
- **图形数据**:节点和链接
### 可用图形
1. **consciousness_graph.json** – 心灵哲学(Bewusstsein)– *默认*
2. **system-architecture.json** – 微服务架构
3. **empty-graph.json** – 随时可用的空白模板
### 管理图形
有关创建、编辑和管理图形的详细说明,请参阅 **[GRAPHS.md](./GRAPHS.md)**。
快速入门:
- 点击左上角的下拉菜单在图形之间切换
- 使用下拉菜单中的 **Add new graph** 创建自定义图形(YAML 编辑器)
- 在 `src/data/` 中编辑内置图形或创建新的 JSON 文件
- 使用 `empty-graph.json` 作为新图形的模板
### 节点结构
```
{
id: string; // Unique identifier
name: string; // Display name
description?: string; // Detailed description
group: number; // Color group (1-7)
}
```
### 链接结构
```
{
source: string; // Source node ID
target: string; // Target node ID
label?: string; // Edge label
}
```
## 键盘快捷键
- `Ctrl/Cmd + K`:切换搜索覆盖层
- `ESC`:关闭搜索覆盖层(展开时)
## 自定义
### 颜色
节点颜色由组(1-7)定义。所有视图(3D、Cosmo、2D)和节点信息面板均使用统一的调色板。请在 **`src/lib/groupColors.ts`** 中编辑 `getGroupColor` 和 `GROUP_COLOR_PALETTE`。
### 标签
- 节点标签:在 3D 和 2D 中始终可见
- 边标签:在两个视图中始终可见
- 文本大小和样式可在相应的组件文件中调整
## 许可证
MIT
标签:3D可视化, Bun, Cosmograph, Graphology, React, Sigma.js, Syscalls, Tailwind CSS, Three.js, WebGL, Webhook, YAML编辑器, Zustand, 交互式图表, 关系图谱, 力导向图, 图可视化, 图形学, 基线检查, 网络拓扑图, 自动化攻击