网络图:可视化2D布局¶
本示例展示了如何使用networkplot可视化2D布局。
[1]:
import graspologic
import numpy as np
import pandas as pd
%matplotlib inline
/home/runner/.cache/pypoetry/virtualenvs/graspologic-pkHfzCJ8-py3.10/lib/python3.10/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html
from .autonotebook import tqdm as notebook_tqdm
使用networkplot可视化2D布局¶
使用随机块模型模拟邻接矩阵¶
2块模型定义如下:
\begin{align*} P = \begin{bmatrix}0.25 & 0.05 \\ 0.05 & 0.25 \end{bmatrix} \end{align*}
关于随机块模型的更多信息可以在这里找到。
[2]:
from graspologic.simulations import sbm
n_communities = [50, 50]
p = [[0.25, 0.05], [0.05, 0.25]]
np.random.seed(1)
A, node_ids = sbm(n_communities, p, return_labels=True)
print(A.shape)
(100, 100)
使用ASE生成2D嵌入¶
邻接谱嵌入(ASE)降低了输入邻接矩阵的维度并估计其潜在位置,生成一个低维空间中的嵌入。在这个例子中,ASE将SBM生成的邻接矩阵嵌入到二维空间并计算其坐标。
有关ASE的更多信息可以在这里找到。
[3]:
from graspologic.embed import AdjacencySpectralEmbed
ase = AdjacencySpectralEmbed(n_components=2)
X = ase.fit_transform(A)
print(X.shape)
(100, 2)
可视化2D布局¶
请注意,节点颜色是由随机分配的社区决定的,节点大小由连接到每个节点的边数决定。下面图表中的边颜色基于它们的源节点。
[4]:
from graspologic.plot.plot import networkplot
x_pos = X[:,0]
y_pos = X[:,1]
degrees = np.sum(A, axis=0)
plot = networkplot(adjacency=A, x=x_pos, y=y_pos, node_hue=node_ids, palette='deep', node_size=degrees,
node_sizes=(20, 200), edge_hue='source', edge_alpha=0.5, edge_linewidth=0.5)
或者,我们也可以使用pandas dataframe,并使用x、y、node_hue和node_size作为键。请注意,对于下面的图表,边的颜色是通过将edge_hue设置为‘target’来根据其目标节点确定的。
[5]:
index = range(X.shape[0])
node_df = pd.DataFrame(index=index)
node_df.loc[:, 'x'] = X[:,0]
node_df.loc[:, 'y'] = X[:,1]
node_df.loc[:, 'id'] = node_ids
node_df.loc[:, 'degree'] = np.sum(A, axis=0)
plot = networkplot(adjacency=A, node_data=node_df, x='x', y='y', node_hue='id', palette='deep',
node_size='degree', node_sizes=(20, 200), edge_hue='target', edge_alpha=0.5, edge_linewidth=0.5)
[ ]: