我有一些超过100行的CSV文件,比如这个表,
。
我试图创建一个从A到B、C和D的图形,并使用权重边距离。
我现在使用pyvis,但问题是边长都一样。
import pandas as pd
from IPython.display import display, HTML
from pyvis.network import Network
df = pd.read_csv('sample_data.csv')
got_net = Network(notebook=True, cdn_resources='in_line')
sources = df['from']
targets = df['to']
weights = df['weight']
edge_data = zip(sources, targets, weights)
for e in edge_data:
src = e[0]
dst = e[1]
w = e[2]
got_net.add_node(src, src, title=src)
got_net.add_node(dst, dst, title=dst)
got_net.add_edge(src, dst, label = "weight")
neighbor_map = got_net.get_adj_list()
for node in got_net.nodes:
node['title'] += ' Neighbors:' + ''.join(neighbor_map[node['id']])
node['value'] = len(neighbor_map[node['id']])
got_net.save_graph('graph.html')
display(HTML("graph.html"))
1条答案
按热度按时间b1uwtaje1#
不要忘记设置网络图的“物理引擎”,设置边的权重时也要使用
value
(不是label
)参数例如,考虑一个网络可视化,它显示了一段著名的英语文学作品中二元组的频率,比如莎士比亚的"To be or not to be" soliloquy来自 * 哈姆雷特 *:
给出:
注意:* 为了简化这个例子,我只包括了最频繁(出现次数> 3)的后续字母对。
不出所料,最主要的结果是:
*“TH”(例如“the”...)是最常见的二元语法,
*后接“他”(也如“那个”)。
让我们看看
pyvis
如何直观地表示这一点:显然,这种类型的“网络”可视化的一个关键考虑是,单个节点可以同时是“从”和“到”的位置。因此,当可视化两个单个节点之间的任何连接的“权重”时,必须考虑到 * 两者 * 的重量随着节点和可能的成对路径的数量置换地增加,这显然可以很快变得相当复杂。
尽管如此,
pyvis
还是很好地处理了这一点,它使网络具有交互性,并且通过节点在网络中相对于其他节点的整体位置以及它们的边的 * 宽度 * 来直观地表示节点互连的强度(即weight
)。