问题描述
大家好,
我告诉你一些我正在做的事情。我有一个表,其中包含以下列作为信息:“报告来源”、“报告”和“报告用户”(它们在数据框中还有其他名称,但从概念上讲,这就是它们的意思):
根据这些信息,我使用 netwokx
库和 pyvis
可视化框架成功创建了一个网络。我附上代码:
%matplotlib inline
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import networkx as nx
from networkx.drawing.nx_agraph import graphviz_layout
import ipywidgets as widgets
from ipywidgets import interact,interact_manual
#Generar Grafo
df1.insert(1,'ORIGEN','ORIGEN')
paths = df1.loc[:,'ORIGEN':].stack().groupby(level=0).agg(list).values.tolist()
G = nx.DiGraph()
for path in paths:
nx.add_path(G,path)
@interact_manual
def grafo(grafo=['neato','dot','twopi','fdp','sfdp','circo']):
#return df.loc[df[column] > x]
# Posibilidades para parametro "prog": 'neato',‘dot’,‘twopi’,‘fdp’,‘sfdp’,‘circo’
pos = graphviz_layout(G,prog= grafo)
plt.figure(figsize=(20,20))
nx.draw(G,pos= pos,node_size=40,alpha=0.5,node_color="blue",with_labels=True,arrows=True)
plt.savefig("dendograma.pdf")
plt.axis("equal")
plt.show()
return
def draw_graph3(networkx_graph,notebook=True,output_filename='graph.html',show_buttons=True,only_physics_buttons=False):
"""
Esta función acepta un objeto gráfico "networkx",lo convierte en un objeto de red "pyvis" conservando sus atributos de nodo y borde,y devuelve y guarda una visualización de red dinámica.
Atributos de nodo validos:
"size","value","title","x","y","label","color".
(Para más información: https://pyvis.readthedocs.io/en/latest/documentation.html#pyvis.network.Network.add_node)
Atributos de vertices validos:
"arrowStrikethrough","hidden","physics","width"
(Para más información: https://pyvis.readthedocs.io/en/latest/documentation.html#pyvis.network.Network.add_edge)
Argumentos:
networkx_graph: El gráfico para convertir y mostrar
notebook: ¿Quieres desplegar la visualización en Jupyter Notebook?
output_filename: Ubicación donde se guardara la red convertida
show_buttons: ¿Mostrar botones en la versión guardada de la red?
only_physics_buttons: ¿Mostrar parametros para modificar la red?
"""
# Importacion de librerias
from pyvis import network as net
# Crear una red de pyvis
pyvis_graph = net.Network(notebook=notebook,heading='Fuentes Banco Sabadell',directed = True)
# Para cada nodo y sus atributos en el gráfico networkx
for node,node_attrs in networkx_graph.nodes(data=True):
pyvis_graph.add_node(str(node),**node_attrs,size = 10)
# para cada vertice y sus atributos en el gráfico networkx
for source,target,edge_attrs in networkx_graph.edges(data=True):
# si el valor / ancho no se especifica directamente y se especifica el peso,establezca 'value' en 'weight'
if not 'value' in edge_attrs and not 'width' in edge_attrs and 'weight' in edge_attrs:
# colocar en la clave 'value' el peso del vertice
edge_attrs['value']=edge_attrs['weight']
# agregar el vértice
pyvis_graph.add_edge(str(source),str(target),**edge_attrs,arrowStrikethrough = True )
# agregar botones
if show_buttons:
if only_physics_buttons:
pyvis_graph.show_buttons(filter_=['physics'])
else:
pyvis_graph.show_buttons()
# regresar grafo y guardar
return pyvis_graph.show(output_filename)
# Llamada a la función
draw_graph3(G,only_physics_buttons=True)
给我以下网络作为输出:
然而,我想要实现的是源节点有颜色,源节点有不同颜色,报告的节点另一个不同,最后用户的最后一个节点有不同的颜色以改善图形。知道怎么做吗?
您好!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)