为Pyecharts的graph自定义category并设置样式
实现目标
Pyecharts的文档在这里描述不清晰,并没有具体描述实现的方案。在这里我给出一个样例
实现过程
# karate聚类
import networkx as nx
from community import community_louvain
G = nx.karate_club_graph()
com = community_louvain.best_partition(G)
在这个聚类结果中,原数据集被分成了4块,我们希望在图表中呈现。
# 可视化
from pyecharts import options as opts
from pyecharts.charts import Graph
# 创建节点列表和边列表
nodes = [{'name': str(node), 'symbolSize': 20, 'value': len(G[node])} for node in G.nodes()]
edges = [{'source': str(edge[0]), 'target': str(edge[1])} for edge in G.edges()]
# 设置节点分类
categories = [
opts.GraphCategory(name="0"),
opts.GraphCategory(name="1"),
opts.GraphCategory(name="2"),
opts.GraphCategory(name="3"),
]
for node in nodes:
if int(node['name']) in com:
node['category'] = com[int(node['name'])]
# 创建图形对象
graph = (
Graph()
.add("", nodes, edges, categories=categories,repulsion=8000)
.set_global_opts(title_opts=opts.TitleOpts(title="空手道俱乐部社区图"))
.set_colors(["#FF0000", "#00FF00", "#0000FF", "#FFFF00"]) # 为每个category设置颜色
)
# 保存图形到 HTML 文件
graph.render("karate_club_graph.html")