Spaces:
Sleeping
Sleeping
fix: different state
Browse files- app.py +3 -2
- my_pages/page2.py +11 -10
- my_pages/page3.py +9 -90
- presentation.html +296 -0
app.py
CHANGED
@@ -4,6 +4,7 @@ import streamlit as st
|
|
4 |
# 设置页面配置
|
5 |
st.set_page_config(layout="wide")
|
6 |
|
|
|
7 |
# 主应用
|
8 |
def main():
|
9 |
# st.sidebar.title("导航")
|
@@ -23,11 +24,11 @@ def main():
|
|
23 |
|
24 |
page1 = st.Page("my_pages/page1.py", title="无监督聚类动态变化", icon="📊", default=True)
|
25 |
page2 = st.Page("my_pages/page2.py", title="超图神经网络训练过程", icon="📈")
|
26 |
-
|
27 |
# page3 = st.Page("dev/test.py", title="第三个子应用", icon="📉")
|
28 |
|
29 |
pg = st.navigation([page1, page2,
|
30 |
-
|
31 |
])
|
32 |
pg.run()
|
33 |
# pass
|
|
|
4 |
# 设置页面配置
|
5 |
st.set_page_config(layout="wide")
|
6 |
|
7 |
+
|
8 |
# 主应用
|
9 |
def main():
|
10 |
# st.sidebar.title("导航")
|
|
|
24 |
|
25 |
page1 = st.Page("my_pages/page1.py", title="无监督聚类动态变化", icon="📊", default=True)
|
26 |
page2 = st.Page("my_pages/page2.py", title="超图神经网络训练过程", icon="📈")
|
27 |
+
page3 = st.Page("my_pages/page3.py", title="Presentation 演示", icon="📉")
|
28 |
# page3 = st.Page("dev/test.py", title="第三个子应用", icon="📉")
|
29 |
|
30 |
pg = st.navigation([page1, page2,
|
31 |
+
page3
|
32 |
])
|
33 |
pg.run()
|
34 |
# pass
|
my_pages/page2.py
CHANGED
@@ -35,13 +35,13 @@ def main():
|
|
35 |
slider_max = 200
|
36 |
if 'play_state' not in st.session_state:
|
37 |
st.session_state.play_state = False
|
38 |
-
if '
|
39 |
-
st.session_state.
|
40 |
|
41 |
# 定义回调函数来切换播放状态
|
42 |
def toggle_play():
|
43 |
-
if not st.session_state.play_state and st.session_state.
|
44 |
-
st.session_state.
|
45 |
st.session_state.play_state = not st.session_state.play_state
|
46 |
|
47 |
# 创建播放/暂停按钮
|
@@ -53,8 +53,8 @@ def main():
|
|
53 |
|
54 |
# 显示迭代次数滑条
|
55 |
iteration = st.slider("迭代步骤", min_value=10, max_value=slider_max,
|
56 |
-
value=st.session_state.
|
57 |
-
key="
|
58 |
|
59 |
# 从JSON文件加载数据
|
60 |
# 假设JSON文件路径为"authors_papers.json"
|
@@ -85,7 +85,8 @@ def main():
|
|
85 |
|
86 |
max_samples = len(st.session_state.hyper_edges)
|
87 |
num_samples = st.slider("选择采样作者数量", min_value=1,
|
88 |
-
max_value=min(100, max_samples),
|
|
|
89 |
|
90 |
# 采样部分作者
|
91 |
sampled_authors = np.random.choice(st.session_state.hyper_edges, size=num_samples, replace=False)
|
@@ -128,9 +129,9 @@ def main():
|
|
128 |
# 自动播放功能
|
129 |
if st.session_state.play_state:
|
130 |
with st.spinner("正在播放..."):
|
131 |
-
if st.session_state.
|
132 |
-
st.session_state.
|
133 |
-
st.write(f"当前迭代次数: {st.session_state.
|
134 |
time.sleep(1/speed) # 根据速度调整等待时间
|
135 |
st.rerun()
|
136 |
else:
|
|
|
35 |
slider_max = 200
|
36 |
if 'play_state' not in st.session_state:
|
37 |
st.session_state.play_state = False
|
38 |
+
if 'iteration_app2' not in st.session_state:
|
39 |
+
st.session_state.iteration_app2 = 10
|
40 |
|
41 |
# 定义回调函数来切换播放状态
|
42 |
def toggle_play():
|
43 |
+
if not st.session_state.play_state and st.session_state.iteration_app2 == slider_max:
|
44 |
+
st.session_state.iteration_app2 = 10 # 重置迭代次数
|
45 |
st.session_state.play_state = not st.session_state.play_state
|
46 |
|
47 |
# 创建播放/暂停按钮
|
|
|
53 |
|
54 |
# 显示迭代次数滑条
|
55 |
iteration = st.slider("迭代步骤", min_value=10, max_value=slider_max,
|
56 |
+
value=st.session_state.iteration_app2, step=10,
|
57 |
+
key="iteration_app2_slider")
|
58 |
|
59 |
# 从JSON文件加载数据
|
60 |
# 假设JSON文件路径为"authors_papers.json"
|
|
|
85 |
|
86 |
max_samples = len(st.session_state.hyper_edges)
|
87 |
num_samples = st.slider("选择采样作者数量", min_value=1,
|
88 |
+
max_value=min(100, max_samples),
|
89 |
+
value=min(10, max_samples), step=1)
|
90 |
|
91 |
# 采样部分作者
|
92 |
sampled_authors = np.random.choice(st.session_state.hyper_edges, size=num_samples, replace=False)
|
|
|
129 |
# 自动播放功能
|
130 |
if st.session_state.play_state:
|
131 |
with st.spinner("正在播放..."):
|
132 |
+
if st.session_state.iteration_app2 < slider_max:
|
133 |
+
st.session_state.iteration_app2 += 10
|
134 |
+
st.write(f"当前迭代次数: {st.session_state.iteration_app2}")
|
135 |
time.sleep(1/speed) # 根据速度调整等待时间
|
136 |
st.rerun()
|
137 |
else:
|
my_pages/page3.py
CHANGED
@@ -1,95 +1,14 @@
|
|
1 |
from typing import Dict, List
|
2 |
import streamlit as st
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
import hypernetx as hnx
|
7 |
-
import matplotlib.pyplot as plt
|
8 |
-
from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas
|
9 |
-
from io import BytesIO
|
10 |
-
import time
|
11 |
-
import json
|
12 |
-
from utils.data_processor import process_data, build_hyperedges
|
13 |
-
from utils.visualizer import visualize_gmm, visualize_ratings
|
14 |
-
from utils.streamlit_hypergraph import hypergraph_visualization_component
|
15 |
-
|
16 |
-
def load_json_data(file_path: str) -> Dict[str, List[int]]:
|
17 |
-
"""从JSON文件中加载数据"""
|
18 |
-
with open(file_path, 'r') as f:
|
19 |
-
data = json.load(f)
|
20 |
-
return data
|
21 |
|
22 |
def main():
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
if 'iteration' not in st.session_state:
|
30 |
-
st.session_state.iteration = 0
|
31 |
-
|
32 |
-
# 定义回调函数来切换播放状态
|
33 |
-
def toggle_play():
|
34 |
-
if not st.session_state.play_state and st.session_state.iteration == slider_max:
|
35 |
-
st.session_state.iteration = 0 # 重置迭代次数
|
36 |
-
st.session_state.play_state = not st.session_state.play_state
|
37 |
-
|
38 |
-
# 创建播放/暂停按钮
|
39 |
-
if st.session_state.play_state:
|
40 |
-
button_label = "暂停"
|
41 |
-
else:
|
42 |
-
button_label = "开始拟合"
|
43 |
-
st.button(button_label, on_click=toggle_play, key="play_button")
|
44 |
-
|
45 |
-
# 显示迭代次数滑条
|
46 |
-
iteration = st.slider("迭代步骤", min_value=1, max_value=slider_max,
|
47 |
-
value=st.session_state.iteration, step=1,
|
48 |
-
key="iteration_slider")
|
49 |
-
|
50 |
-
# 从JSON文件加载数据
|
51 |
-
# 假设JSON文件路径为"authors_papers.json"
|
52 |
-
data = load_json_data("hyper_edges.json")
|
53 |
-
|
54 |
-
# 使用 sidebar 控制参数
|
55 |
-
with st.sidebar:
|
56 |
-
st.header("控制面板")
|
57 |
-
speed = st.slider("拟合速度", min_value=0.1, max_value=2.0, value=1.0, step=0.1, key="speed_slider")
|
58 |
-
draw_width = st.slider("绘图宽度", min_value=3, max_value=20, value=6, step=1, key="draw_width")
|
59 |
-
draw_height = st.slider("绘图高度", min_value=3, max_value=20, value=6, step=1, key="draw_height")
|
60 |
-
|
61 |
-
max_samples = len(data)
|
62 |
-
num_samples = st.slider("选择采样作者数量", min_value=1,
|
63 |
-
max_value=min(100, max_samples), value=min(10, max_samples), step=1)
|
64 |
-
|
65 |
-
# 采样部分作者
|
66 |
-
sampled_authors = np.random.choice(data, size=num_samples, replace=False)
|
67 |
-
sampled_data = {list(author_dict.keys())[0]: list(author_dict.values())[0] for author_dict in sampled_authors}
|
68 |
-
|
69 |
-
# 构建超边
|
70 |
-
hyperedges = sampled_data
|
71 |
-
hypergraph = hnx.Hypergraph(hyperedges)
|
72 |
-
|
73 |
-
show_hypergraph = st.checkbox("显示超图", value=True, key="show_hyperedges")
|
74 |
-
|
75 |
-
if show_hypergraph:
|
76 |
-
hypergraph_visualization_component(hypergraph, draw_width, draw_height)
|
77 |
-
|
78 |
-
# 显示采样作者的详细信息
|
79 |
-
st.header("采样作者详细信息")
|
80 |
-
authors_df = pd.DataFrame([(author, len(papers)) for author, papers in sampled_data.items()],
|
81 |
-
columns=["作者", "论文数量"])
|
82 |
-
st.dataframe(authors_df)
|
83 |
-
|
84 |
-
# 自动播放功能
|
85 |
-
if st.session_state.play_state:
|
86 |
-
with st.spinner("正在播放..."):
|
87 |
-
if st.session_state.iteration < slider_max:
|
88 |
-
st.session_state.iteration += 1
|
89 |
-
st.write(f"当前迭代次数: {st.session_state.iteration}")
|
90 |
-
time.sleep(1/speed) # 根据速度调整等待时间
|
91 |
-
st.rerun()
|
92 |
-
else:
|
93 |
-
st.session_state.play_state = False
|
94 |
-
|
95 |
main()
|
|
|
1 |
from typing import Dict, List
|
2 |
import streamlit as st
|
3 |
+
from pathlib import Path
|
4 |
+
this_file = Path(__file__).resolve()
|
5 |
+
parent_dir = this_file.parent.parent
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6 |
|
7 |
def main():
|
8 |
+
with open (parent_dir/"presentation.html", "r", encoding="utf-8") as f:
|
9 |
+
html = f.read()
|
10 |
+
st.html(html)
|
11 |
+
# url = "parent_dir/"presentation.html)"
|
12 |
+
# st.write("check out this [link](%s)" % url)
|
13 |
+
# st.markdown("check out this [link](%s)" % url)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
14 |
main()
|
presentation.html
ADDED
@@ -0,0 +1,296 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<!DOCTYPE html>
|
2 |
+
<html lang="en">
|
3 |
+
<head>
|
4 |
+
<meta charset="UTF-8">
|
5 |
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
6 |
+
<title>Python中最佳的稳定交互式超图可视化库</title>
|
7 |
+
<style>
|
8 |
+
body {
|
9 |
+
font-family: Arial, sans-serif;
|
10 |
+
margin: 0;
|
11 |
+
padding: 0;
|
12 |
+
background-color: #f5f5f5;
|
13 |
+
}
|
14 |
+
.slide-container {
|
15 |
+
max-width: 800px;
|
16 |
+
margin: 0 auto;
|
17 |
+
background-color: white;
|
18 |
+
box-shadow: 0 0 10px rgba(0,0,0,0.1);
|
19 |
+
padding: 20px;
|
20 |
+
}
|
21 |
+
.slide {
|
22 |
+
margin-bottom: 30px;
|
23 |
+
padding: 20px;
|
24 |
+
border-radius: 5px;
|
25 |
+
background-color: #fff;
|
26 |
+
box-shadow: 0 0 5px rgba(0,0,0,0.1);
|
27 |
+
}
|
28 |
+
.slide h2 {
|
29 |
+
color: #2c3e50;
|
30 |
+
margin-top: 0;
|
31 |
+
}
|
32 |
+
.slide p {
|
33 |
+
line-height: 1.6;
|
34 |
+
color: #34495e;
|
35 |
+
}
|
36 |
+
.code-block {
|
37 |
+
background-color: #f8f9fa;
|
38 |
+
padding: 10px;
|
39 |
+
border-radius: 5px;
|
40 |
+
font-family: monospace;
|
41 |
+
white-space: pre-wrap;
|
42 |
+
margin: 10px 0;
|
43 |
+
}
|
44 |
+
.highlight {
|
45 |
+
background-color: #e8f4f8;
|
46 |
+
padding: 2px 5px;
|
47 |
+
border-radius: 3px;
|
48 |
+
}
|
49 |
+
.navigation {
|
50 |
+
text-align: center;
|
51 |
+
margin-top: 20px;
|
52 |
+
}
|
53 |
+
.navigation button {
|
54 |
+
padding: 10px 20px;
|
55 |
+
margin: 0 10px;
|
56 |
+
background-color: #3498db;
|
57 |
+
color: white;
|
58 |
+
border: none;
|
59 |
+
border-radius: 5px;
|
60 |
+
cursor: pointer;
|
61 |
+
font-size: 16px;
|
62 |
+
}
|
63 |
+
.navigation button:hover {
|
64 |
+
background-color: #2980b9;
|
65 |
+
}
|
66 |
+
table {
|
67 |
+
width: 100%;
|
68 |
+
border-collapse: collapse;
|
69 |
+
margin: 15px 0;
|
70 |
+
}
|
71 |
+
th, td {
|
72 |
+
border: 1px solid #ddd;
|
73 |
+
padding: 8px;
|
74 |
+
text-align: left;
|
75 |
+
}
|
76 |
+
th {
|
77 |
+
background-color: #f2f2f2;
|
78 |
+
}
|
79 |
+
.comparison {
|
80 |
+
font-weight: bold;
|
81 |
+
color: #2c3e50;
|
82 |
+
}
|
83 |
+
</style>
|
84 |
+
</head>
|
85 |
+
<body>
|
86 |
+
<div class="slide-container">
|
87 |
+
<div class="slide" id="slide1">
|
88 |
+
<h2>Python中最佳的稳定交互式超图可视化库</h2>
|
89 |
+
<p>超图是传统图的推广,为建模以实体间多向交互为特征的复杂系统提供了一个强大的框架。与标准图中边精确连接两个节点不同,超图中的超边可以连接任意数量的节点。</p>
|
90 |
+
<p>本报告旨在确定Python库,该库在稳定性(特别是对于大型和复杂的超图)和交互功能方面提供了最佳组合,以促进对其进行探索和分析。</p>
|
91 |
+
</div>
|
92 |
+
|
93 |
+
<div class="slide" id="slide2" style="display: none;">
|
94 |
+
<h2>主要Python超图可视化库</h2>
|
95 |
+
<p>通过研究,确定了四个主要的Python库,它们提供超图可视化功能:</p>
|
96 |
+
<ul>
|
97 |
+
<li><strong>HyperNetX (HNX)</strong>:由太平洋西北国家实验室 (PNNL) 开发,专注于使用代数拓扑和组合学方法分析和可视化复杂网络。</li>
|
98 |
+
<li><strong>Hypergraphx (HGX)</strong>:较新的库,提供全面的算法用于构建、分析和可视化具有高级交互的系统。</li>
|
99 |
+
<li><strong>XGI (CompleX Group Interactions)</strong>:由网络科学家设计,专注于建模、分析和可视化具有群体交互的复杂系统。</li>
|
100 |
+
<li><strong>dhg (DeepHypergraph)</strong>:基于PyTorch的深度学习库,专门设计用于图和超图神经网络。</li>
|
101 |
+
</ul>
|
102 |
+
</div>
|
103 |
+
|
104 |
+
<div class="slide" id="slide3" style="display: none;">
|
105 |
+
<h2>HyperNetX (HNX)</h2>
|
106 |
+
<p>HyperNetX最初于2019年发布,由PNNL开发,专注于使用代数拓扑和组合学方法分析和可视化复杂网络。</p>
|
107 |
+
<p>交互功能:</p>
|
108 |
+
<ul>
|
109 |
+
<li>通过HyperNetX-Widget提供交互功能,包括力导向布局、高级选择机制(单击、多选、拖动、刷选)。</li>
|
110 |
+
<li>支持节点折叠,将具有相同边成员关系的节点分组为超级节点。</li>
|
111 |
+
<li>提供二分图视图,显示超图的替代视角。</li>
|
112 |
+
</ul>
|
113 |
+
<p>稳定性:</p>
|
114 |
+
<ul>
|
115 |
+
<li>核心库稳定,利用Pandas DataFrames提高性能。</li>
|
116 |
+
<li>HNX-Widget目前处于beta阶段,建议在Anaconda环境中使用。</li>
|
117 |
+
</ul>
|
118 |
+
</div>
|
119 |
+
|
120 |
+
<div class="slide" id="slide4" style="display: none;">
|
121 |
+
<h2>Hypergraphx (HGX)</h2>
|
122 |
+
<p>Hypergraphx于2023年发布,是一个多用途高级网络分析工具。</p>
|
123 |
+
<p>交互功能:</p>
|
124 |
+
<ul>
|
125 |
+
<li>提供“不同的可视化工具”,但具体交互功能(如缩放、平移、节点选择)未详细说明。</li>
|
126 |
+
</ul>
|
127 |
+
<p>稳定性:</p>
|
128 |
+
<ul>
|
129 |
+
<li>在分析任务中具有良好的可扩展性,适用于非常大的超图。</li>
|
130 |
+
<li>其可视化功能对于大型数据集的稳定性未明确说明。</li>
|
131 |
+
</ul>
|
132 |
+
</div>
|
133 |
+
|
134 |
+
<div class="slide" id="slide5" style="display: none;">
|
135 |
+
<h2>XGI (CompleX Group Interactions)</h2>
|
136 |
+
<p>XGI于2021年发布,专注于建模、分析和可视化具有群体交互的复杂系统。</p>
|
137 |
+
<p>交互功能:</p>
|
138 |
+
<ul>
|
139 |
+
<li>提供“方便的可视化功能”,但具体交互功能未详细说明。</li>
|
140 |
+
</ul>
|
141 |
+
<p>稳定性:</p>
|
142 |
+
<ul>
|
143 |
+
<li>已用于涉及超图的可扩展张量方法的研究。</li>
|
144 |
+
<li>缺乏其可视化对于大型超图的稳定性的直接证据。</li>
|
145 |
+
</ul>
|
146 |
+
</div>
|
147 |
+
|
148 |
+
<div class="slide" id="slide6" style="display: none;">
|
149 |
+
<h2>dhg (DeepHypergraph)</h2>
|
150 |
+
<p>dhg于2022年发布,是一个基于PyTorch的深度学习库,专注于图和超图神经网络。</p>
|
151 |
+
<p>交互功能:</p>
|
152 |
+
<ul>
|
153 |
+
<li>提供“强大的图和超图可视化工具”,但具体交互功能未详细说明。</li>
|
154 |
+
</ul>
|
155 |
+
<p>稳定性:</p>
|
156 |
+
<ul>
|
157 |
+
<li>性能重点在于超图上的深度学习。</li>
|
158 |
+
<li>缺乏关于其可视化对于广泛超图的稳定性的具体信息。</li>
|
159 |
+
</ul>
|
160 |
+
</div>
|
161 |
+
|
162 |
+
<div class="slide" id="slide7" style="display: none;">
|
163 |
+
<h2>库功能比较</h2>
|
164 |
+
<table>
|
165 |
+
<tr>
|
166 |
+
<th>功能</th>
|
167 |
+
<th>HyperNetX</th>
|
168 |
+
<th>Hypergraphx</th>
|
169 |
+
<th>XGI</th>
|
170 |
+
<th>dhg</th>
|
171 |
+
</tr>
|
172 |
+
<tr>
|
173 |
+
<td>缩放</td>
|
174 |
+
<td>是</td>
|
175 |
+
<td>否</td>
|
176 |
+
<td>否</td>
|
177 |
+
<td>否</td>
|
178 |
+
</tr>
|
179 |
+
<tr>
|
180 |
+
<td>平移</td>
|
181 |
+
<td>是</td>
|
182 |
+
<td>否</td>
|
183 |
+
<td>否</td>
|
184 |
+
<td>否</td>
|
185 |
+
</tr>
|
186 |
+
<tr>
|
187 |
+
<td>节点选择</td>
|
188 |
+
<td>是</td>
|
189 |
+
<td>否</td>
|
190 |
+
<td>否</td>
|
191 |
+
<td>否</td>
|
192 |
+
</tr>
|
193 |
+
<tr>
|
194 |
+
<td>边选择</td>
|
195 |
+
<td>是</td>
|
196 |
+
<td>否</td>
|
197 |
+
<td>否</td>
|
198 |
+
<td>否</td>
|
199 |
+
</tr>
|
200 |
+
<tr>
|
201 |
+
<td>拖拽</td>
|
202 |
+
<td>是</td>
|
203 |
+
<td>否</td>
|
204 |
+
<td>否</td>
|
205 |
+
<td>否</td>
|
206 |
+
</tr>
|
207 |
+
<tr>
|
208 |
+
<td>刷选</td>
|
209 |
+
<td>是</td>
|
210 |
+
<td>否</td>
|
211 |
+
<td>否</td>
|
212 |
+
<td>否</td>
|
213 |
+
</tr>
|
214 |
+
<tr>
|
215 |
+
<td>工具提示</td>
|
216 |
+
<td>是</td>
|
217 |
+
<td>否</td>
|
218 |
+
<td>否</td>
|
219 |
+
<td>否</td>
|
220 |
+
</tr>
|
221 |
+
<tr>
|
222 |
+
<td>节点折叠</td>
|
223 |
+
<td>是</td>
|
224 |
+
<td>否</td>
|
225 |
+
<td>否</td>
|
226 |
+
<td>否</td>
|
227 |
+
</tr>
|
228 |
+
<tr>
|
229 |
+
<td>二分图视图</td>
|
230 |
+
<td>是</td>
|
231 |
+
<td>是</td>
|
232 |
+
<td>是</td>
|
233 |
+
<td>否</td>
|
234 |
+
</tr>
|
235 |
+
<tr>
|
236 |
+
<td>属性控制</td>
|
237 |
+
<td>是</td>
|
238 |
+
<td>否</td>
|
239 |
+
<td>是</td>
|
240 |
+
<td>否</td>
|
241 |
+
</tr>
|
242 |
+
</table>
|
243 |
+
</div>
|
244 |
+
|
245 |
+
<div class="slide" id="slide8" style="display: none;">
|
246 |
+
<h2>结论与建议</h2>
|
247 |
+
<p>根据比较分析,HyperNetX (HNX) 通过其 HyperNetX-Widget 提供了最全面的超图可视化交互功能集。</p>
|
248 |
+
<ul>
|
249 |
+
<li>HNX 的交互功能包括布局调整、高级选择、可见性操作和属性控制。</li>
|
250 |
+
<li>核心 HNX 库稳定且文档完善,拥有支持性的社区和交互式教程等资源。</li>
|
251 |
+
<li>对于处理大型超图,HNX 提供节点折叠作为视觉辅助。</li>
|
252 |
+
</ul>
|
253 |
+
<p>建议:</p>
|
254 |
+
<ul>
|
255 |
+
<li>首先使用 HyperNetX,因为它具有明确的交互功能以及核心��的稳定性。</li>
|
256 |
+
<li>如果对极其庞大的超图的稳定性成为首要关注点,而交互式探索是次要的,则建议进一步评估 Hypergraphx。</li>
|
257 |
+
</ul>
|
258 |
+
</div>
|
259 |
+
|
260 |
+
<div class="navigation">
|
261 |
+
<button onclick="prevSlide()">上一页</button>
|
262 |
+
<button onclick="nextSlide()">下一页</button>
|
263 |
+
</div>
|
264 |
+
</div>
|
265 |
+
|
266 |
+
<script>
|
267 |
+
let currentSlide = 1;
|
268 |
+
const totalSlides = 8;
|
269 |
+
|
270 |
+
function showSlide(n) {
|
271 |
+
// 隐藏所有幻灯片
|
272 |
+
for (let i = 1; i <= totalSlides; i++) {
|
273 |
+
document.getElementById(`slide${i}`).style.display = 'none';
|
274 |
+
}
|
275 |
+
// 显示当前幻灯片
|
276 |
+
document.getElementById(`slide${n}`).style.display = 'block';
|
277 |
+
currentSlide = n;
|
278 |
+
}
|
279 |
+
|
280 |
+
function nextSlide() {
|
281 |
+
if (currentSlide < totalSlides) {
|
282 |
+
showSlide(currentSlide + 1);
|
283 |
+
}
|
284 |
+
}
|
285 |
+
|
286 |
+
function prevSlide() {
|
287 |
+
if (currentSlide > 1) {
|
288 |
+
showSlide(currentSlide - 1);
|
289 |
+
}
|
290 |
+
}
|
291 |
+
|
292 |
+
// 初始化显示第一页
|
293 |
+
showSlide(1);
|
294 |
+
</script>
|
295 |
+
</body>
|
296 |
+
</html>
|