首页 > 编程笔记 > Python笔记 阅读:1

Python绘制蜂巢图(附带实例)

蜂巢图(Hive Plot)是一种用于可视化多变量之间关系的图表类型。它通过使用多个轴线和连接线在一个蜂巢形状的布局中显示数据变量和它们之间的关系,帮助观察和分析多变量之间的模式和趋势。

蜂巢图的优点是能够同时显示多个变量之间的关系,并将它们组织在一个紧凑且可视化明确的布局中,常用于可视化复杂的关系网络、多维数据分析等。

【实例】利用 Hiveplotlib 库绘制蜂巢图。输入如下代码:
import matplotlib.pyplot as plt
import networkx as nx
import numpy as np
from hiveplotlib import hive_plot_n_axes
# 用于创建蜂巢图
from hiveplotlib.converters import networkx_to_nodes_edges
# 用于将NetworkX图转换为节点和边
from hiveplotlib.node import split_nodes_on_variable
# 用于根据变量拆分节点
from hiveplotlib.viz import hive_plot_viz
# 用于可视化蜂巢图

# 生成具有指定块大小和概率的随机块模型图
G = nx.stochastic_block_model(
    sizes=[10, 10, 10],
    p=[[0.1, 0.5, 0.5], [0.05, 0.1, 0.2], [0.05, 0.2, 0.1]],
    directed=True,
    seed=0
)

# 将图转换为节点和边
nodes, edges = networkx_to_nodes_edges(G)

# 根据变量将节点拆分为块
blocks_dict = split_nodes_on_variable(nodes, variable_name="block")
splits = list(blocks_dict.values())

# 不关心轴上的模式,将节点随机放置在轴上
rng = np.random.default_rng(0)
for node in nodes:
    node.add_data(data={"val": rng.uniform()})

# 创建蜂巢图,并指定节点、边、轴的分配情况以及排序变量
hp = hive_plot_n_axes(
    node_list=nodes,
    edges=edges,
    axes_assignments=splits,
    sorting_variables=["val"] * 3
)

fig, ax = hive_plot_viz(hp)
ax.set_title(
    "Stochastic Block Model, Base Hive Plot Visualization",
    y=1.05,
    size=20
)
plt.show()

# 在可视化函数中更改节点和轴的参数
fig, ax = hive_plot_viz(
    hp,
    node_kwargs={"color": "c1", "s": 80},
    axes_kwargs={"color": "none", "ls": "dotted"}
)
ax.set_title(
    "Stochastic Block Model, Changing Kwargs in Viz Function",
    y=1.05,
    size=20
)
plt.show()

# 将所有3个组的重复轴打开
hp = hive_plot_n_axes(
    node_list=nodes,
    edges=edges,
    axes_assignments=splits,
    sorting_variables=["val"] * 3,
    repeat_axes=[True, True, True],
    all_edge_kwargs={"color": "darkgrey"},
    repeat_edge_kwargs={"color": "c0"},
    ccw_edge_kwargs={"color": "c1"}
)

# 在图中添加文本说明
fig, ax = hive_plot_viz(hp)
fig.text(0.12, 0.95, "Less", ha="left", va="bottom", fontsize=20, color="black")
fig.text(
    0.19,
    0.95,
    "intra-group activity",
    weight="heavy",
    ha="left",
    va="bottom",
    fontsize=20,
    color="c0"
)
fig.text(0.5, 0.95, "relative to", ha="left", va="bottom", fontsize=20, color="black")
fig.text(
    0.65,
    0.95,
    "inter-group activity",
    weight="heavy",
    ha="left",
    va="bottom",
    fontsize=20,
    color="darkgrey"
)
plt.show()
上述代码通过 NetworkX 库生成了一个随机块模型图,然后将其转换为节点和边。接着,根据节点的属性将节点分组,并随机分配节点在轴上的位置。通过调用 hive_plot_n_axes() 函数创建了蜂巢图,并指定了节点、边和轴的分配情况,以及排序变量。最后,调用 hive_plot_viz() 函数进行可视化,可以根据需要更改节点和轴的参数,以及设置重复轴的显示。

输出的结果如下图所示:

相关文章