es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Edición adicional para elementos en la información emergente de PyVis?

Estoy haciendo una visualización de red utilizando PyVis y esperaba agregar algunos elementos adicionales en la función de información sobre herramientas al pasar el cursor por encima de los nodos.

Básicamente estoy utilizando el código directamente desde la sección de tutoriales de la documentación de PyVis para la red de Game of Thrones:
https://pyvis.readthedocs.io/en/latest/tutorial.html

La información sobre herramientas en esta función está configurada para mostrar listas de vecinos adyacentes al pasar el cursor por encima de un nodo. Me gustaría mostrar esta misma información, pero también me gustaría mostrar el peso del borde asociado a cada vecino.

Sé que el peso se está teniendo en cuenta en mi visualización, ya que el ancho del borde cambia según el peso, pero los pocos intentos que he hecho no han mostrado ningún cambio en la información sobre herramientas.

Esto es lo que he intentado además del código responsable de la información sobre herramientas (la sección de la información sobre herramientas está hacia la parte inferior, justo debajo del objeto “neighbor_map”):

HCP_net = Network(height='750px', width='100%', bgcolor='#222222', font_color='white')

HCP_net.barnes_hut()

sources = df2['HCP_Name']
targets = df2['HCPOffset_Name']
weights = df2['PATIENT_ID (DCOUNT)']

edge_data = zip(sources, targets, weights)

for e in edge_data:
    src = e[0]
    dst = e[1]
    w = e[2]

HCP_net.add_node(src, src, title=src)
HCP_net.add_node(dst, dst, title=dst)
HCP_net.add_edge(src, dst, value=w)

neighbor_map = HCP_net.get_adj_list()
node_weight = HCP_net.get_edges() #mi intento de crear un objeto de peso para llamar, si llamo a print(len(node_weight)) obtengo un número entero, así que sé que esto está funcionando

for node in HCP_net.nodes:
    node['title'] += ' Vecinos: <br>' + '<br>'.join(neighbor_map[node['id']])
    node['value'] = len(neighbor_map[node['id']])
    node['value'] = len(neighbor_map.keys()) #Esto llamado por sí mismo (print(len(neighbor_map.keys()))) también muestra el mismo número entero que mi objeto de peso de nodo

Creo que simplemente no entiendo cómo llamar correctamente a node[‘value’] para obtener una nueva visualización en la información sobre herramientas. ¡Cualquier ayuda es muy apreciada!

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para añadir el peso del borde asociado a cada vecino a la función tooltip al pasar el ratón por los nodos, puedes modificar el siguiente código responsable de tooltip:

    for node in HCP_net.nodes:
        node['title'] += ' Vecinos: <br>' + '<br>'.join(neighbor_map[node['id']])
        node['value'] = len(neighbor_map[node['id']])
    

    reemplazándolo por el siguiente código:

    for node in HCP_net.nodes:
        neighbors = neighbor_map[node['id']]
        tooltip_text = 'Vecinos: <br>'
        for neighbor in neighbors:
            try:
                weight = HCP_net.get_edge_data(node['id'], neighbor)['value']
            except:
                weight = HCP_net.get_edge_data(neighbor, node['id'])['value']
            tooltip_text += neighbor + ' (' + str(weight) + ')' + '<br>'
        node['title'] = tooltip_text
        node['value'] = len(neighbors)
    

    Este código solicita cada vecino de un nodo dado e intenta obtener el peso del borde desde ese nodo hacia su vecino usando HCP_net.get_edge_data(). Si falla, intenta obtener el peso desde el vecino hacia el nodo. Una vez que tiene el peso, lo añade al texto de tooltip junto con el nombre del vecino. El tooltip resultante mostrará el nombre de cada vecino y el peso del borde asociado en una nueva línea.

Comments are closed.