我一直在研究应用类型之间的关系可视化。这不是一个完全的“网络”,但我想要绘制一个网络图。
有32个应用类型,每个类型之间的关系如下所示:
genre_pt.most_common(20)
[(('Personalization', 'Communication'), 22274),
(('Personalization', 'Social'), 9774),
(('Communication', 'Personalization'), 8393),
(('Communication', 'Communication'), 6244),
(('Lifestyle', 'Health & Fitness'), 4142),
(('Health & Fitness', 'Communication'), 3737),
(('Tools', 'Communication'), 3584),
(('Personalization', 'Tools'), 3082),
(('Social', 'Personalization'), 2767),
(('Personalization', 'Books & Reference'), 2662),
(('Personalization', 'Health & Fitness'), 2548),
(('Education', 'Communication'), 2530),
(('Personalization', 'Education'), 2376),
(('Social', 'Communication'), 2297),
(('Personalization', 'Personalization'), 2285),
(('Social', 'Health & Fitness'), 2261),
(('Personalization', 'Finance'), 1985),
(('Communication', 'Social'), 1926),
(('Personalization', 'Lifestyle'), 1829),
(('Communication', 'Tools'), 1729)]
我想制作一个有向网络图,元组的第一个值表示节点来自哪里,下一个值表示节点到达哪里,最后一个数值是两个节点之间的权重。
到目前为止,我已经使用以下代码通过pyvis或networkx制作了绘图,但由于我有太多的节点(每个32个,因此32 * 32 = 1024 !!),所以绘图不够清晰。
net = Network(notebook=True)
for gen in set(genre_dict.values()): #add node
net.add_node(gen, label=gen)
for k,v in zip(genre_pt.keys(), genre_pt.values()):
if all(k) is False: continue
net.add_edge(k[0], k[1], weight= v) #add values between nodes
ngx = nx.complete_graph(5)
net.from_nx(ngx)
net.show("example.html")
G = nx.DiGraph()
for k,v in zip(genre_pt.keys(), genre_pt.values()):
G.add_edge(k[0], k[1], weight = v)
pos = nx.spring_layout(G)
nx.draw_networkx_nodes(G, pos, node_size=700)
edge_width = [0.15 * G[u][v]['weight'] for u, v in G.edges()]
graph = nx.draw_networkx(G,pos,
alpha = 0.7,
with_labels = True, width = edge_width,
edge_color ='.4', cmap = plt.cm.Blues)
我希望以清晰的方式看到节点之间的有向关系(权重大小如何)。
如果可以得到类似于以下图片的图表,那就最好不过了:
或者至少是类似于以下图片:
并且需要更好地解释说明。
如果有人能够帮助我解决这个问题,我将不胜感激。
谢谢!:D