结果图:
局部放大:
数据格式:
node:人员
边关系:couple,parent,friend
注意事项:
pyvis=0.3.1版本
文件格式.xls (非.xlsx)
pyvis参考文档:https://pyvis.readthedocs.io/en/latest/tutorial.html
代码:
from pyvis.network import Network # pip install pyvis==0.3.1
import xlrd
def load_graph(path):
g = Network(directed=False) # 实例化网络图
# 读取.xls文件(不能是.xlsx文件)
xlsx = xlrd.open_workbook(path)
#-------------------------------------------节点部分------------------------------
# 获取节点
tab_peo = xlsx.sheet_by_name("People") # 读取People sheet
nodesNum = tab_peo.nrows # 获取该sheet中的有效行数(总人数+1)
nodes = []
for i in range (1, nodesNum): # 添加节点,按索引
nodes.append(i)
# 设置节点颜色,以某个颜色开始,按照索引顺序,渐变
color = ['#00ffff'] # 为第一个结点赋予特殊颜色
for x in range(len(nodes) - 1):
current_of_color = int(x / len(nodes) * 255 * 2)
if current_of_color > 255:
color.append('#%02x%02x%02x' % (255, current_of_color - 255, current_of_color - 255))
else:
color.append('#%02x%02x%02x' % (current_of_color, 0, 0))
# 添加节点(参数:节点列表,标签列表,颜色列表)
g.add_nodes(nodes,
label=['G'] * len(nodes),
color=color)
# -------------------------------------------边部分------------------------------
edges = []
# 添加couple关系
tab_cp = xlsx.sheet_by_name("couple") # 根据工作表名字读取excel中的某个表
rowsNum = tab_cp.nrows # 获取该sheet中的有效行数
for i in range (rowsNum): # 遍历行,添加每一行所有单元格的数据内容(边关系)
edges.append(tab_cp.row_values(i, start_colx=0, end_colx=None)) # 返回由该行中所有单元格的数据组成的列表
# 添加parent关系
tab_par = xlsx.sheet_by_name("parent") # 根据工作表名字读取excel中的某个表
rowsNum = tab_par.nrows # 获取该sheet中的有效行数
for i in range(rowsNum):
edges.append(tab_par.row_values(i, start_colx=0, end_colx=None)) # 返回由该行中所有单元格的数据组成的列表
# 添加friend关系
tab_fri = xlsx.sheet_by_name("friend") # 根据工作表名字读取excel中的某个表
rowsNum = tab_fri.nrows # 获取该sheet中的有效行数
for i in range(int(rowsNum*0.6)):
edges.append(tab_fri.row_values(i, start_colx=0, end_colx=None)) # 返回由该行中所有单元格的数据组成的列表
g.add_edges(edges) # 添加所有边关系(参数:边列表)该函数参数仅为边列表,无颜色等设置项(颜色随节点)
# -------------------------------------------图展示------------------------------
return g # 返回图
if __name__ == '__main__':
crime = '涉恐' # 修改犯罪类型即可
path = 'C:/Users/DELL/Desktop/构图数据/demo/' + crime + '.xls' # 需要另存为.xls文件,非.xlsx文件
g = load_graph(path)
g.show_buttons(filter_=['nodes', 'edges', 'physics']) # 在图展示的html中显示调参按钮
g.show(crime + 'graph.html', notebook=False) # 图以html形式展示 pyvis=0.3.1(notebook=False)
修改一下,之前以为添加边不能设置颜色。
下面是指定颜色版本代码:
from pyvis.network import Network # pip install pyvis==0.3.1
import xlrd
def load_graph(path):
g = Network(directed=False) # 实例化网络图
# 读取.xls文件(不能是.xlsx文件)
xlsx = xlrd.open_workbook(path)
#-------------------------------------------节点部分------------------------------
# 获取节点
tab_peo = xlsx.sheet_by_name("People") # 读取People sheet
nodesNum = tab_peo.nrows # 获取该sheet中的有效行数(总人数+1)
nodes = []
for i in range (1, nodesNum): # 添加节点,按索引
nodes.append(i)
# 设置节点颜色,以某个颜色开始,按照索引顺序,渐变
color = ['#00ffff'] # 为第一个结点赋予特殊颜色
for x in range(len(nodes) - 1):
current_of_color = int(x / len(nodes) * 255 * 2)
if current_of_color > 255:
color.append('#%02x%02x%02x' % (255, current_of_color - 255, current_of_color - 255))
else:
color.append('#%02x%02x%02x' % (current_of_color, 0, 0))
# 添加节点(参数:节点列表,标签列表,颜色列表)
g.add_nodes(nodes,
label=['G'] * len(nodes),
color=color)
# -------------------------------------------边部分------------------------------
# 添加couple关系
edges = []
tab_cp = xlsx.sheet_by_name("couple") # 根据工作表名字读取excel中的某个表
rowsNum = tab_cp.nrows # 获取该sheet中的有效行数
for i in range (rowsNum): # 遍历行,添加每一行所有单元格的数据内容(边关系)
edges.append(tab_cp.row_values(i, start_colx=0, end_colx=None)) # 返回由该行中所有单元格的数据组成的列表
g.inherit_edge_colors(False)
for edge in edges:
g.add_edge(edge[0], edge[1], color='green', label="couple", width = 8)
# 添加parent关系
edges = []
tab_par = xlsx.sheet_by_name("parent") # 根据工作表名字读取excel中的某个表
rowsNum = tab_par.nrows # 获取该sheet中的有效行数
for i in range(rowsNum):
edges.append(tab_par.row_values(i, start_colx=0, end_colx=None)) # 返回由该行中所有单元格的数据组成的列表
g.inherit_edge_colors(False)
for edge in edges:
g.add_edge(edge[0], edge[1], color='blue', label="parent", width = 6)
# 添加friend关系
edges = []
tab_fri = xlsx.sheet_by_name("friend") # 根据工作表名字读取excel中的某个表
rowsNum = tab_fri.nrows # 获取该sheet中的有效行数
for i in range(int(rowsNum*0.6)):
edges.append(tab_fri.row_values(i, start_colx=0, end_colx=None)) # 返回由该行中所有单元格的数据组成的列表
g.inherit_edge_colors(False)
for edge in edges:
g.add_edge(edge[0], edge[1], color='orange', label="friend", width = 6)
# -------------------------------------------图展示------------------------------
return g # 返回图
if __name__ == '__main__':
crime = '涉恐' # 修改犯罪类型即可
path = 'C:/Users/DELL/Desktop/构图数据/demo/' + crime + '.xls' # 需要另存为.xls文件,非.xlsx文件
g = load_graph(path)
g.show_buttons(filter_=['nodes', 'edges', 'physics']) # 在图展示的html中显示调参按钮
g.show(crime + 'graph.html', notebook=False) # 图以html形式展示 pyvis=0.3.1(notebook=False)
结果图: