Evento de clic en el nodo de la red utilizando pyvis en Jupyter Lab.
Estoy trabajando en un proyecto de análisis de datos aplicado y estaba intentando agregar un evento de clic a nodos precisos en la red G. Encontré documentación deficiente sobre este tema e intenté implementarlo en mi código. Aquí abajo hay un ejemplo simplificado, tratando de hacer que el nodo 1 abra una página de Wikipedia al hacer clic izquierdo en él a través de un archivo JSON leído como opciones o interacción. La URL se abre automáticamente sin siquiera tener que hacer clic en el nodo y hacer clic en el nodo no hace nada… Parece que Jupyter simplemente ignora mi “interacción” y jerarquía de “clic”. ¡Estoy atascado y pido tu ayuda! ¡Muchas gracias!
import webbrowser
import pyvis
from pyvis import network
from pyvis.network import Network
name = 'Freddie Mercury'
url = "https://en.wikipedia.org/wiki/"+name
def display_page(url):
webbrowser.open_new(url)
G = Network(height='400px', width='80%', bgcolor='white', notebook=True, font_color ='black')
G.add_node(1)
G.add_node(2)
G.add_edges([(1,2,4)])
options = {
"nodes":{
"font":{
"size": 50,
"bold":True
}
},
"edges":{
"color":'red',
"smooth":False
},
"physics":{
"barnesHut":{
"gravitationalConstant":-500000,
"centralGravity":12,
"springLength": 50,
"springConstant": 0.7,
"damping": 3,
"avoidOverlap": 10
}
},
"interaction":{
"click":{
"nodes": ["1"],
"event":[display_page(url)]
}}}
G.options=options
network.Network.show(G,'networkx_click_event.html')
davy.ai
Solución
Parece que hay un error tipográfico en tu código. La clave en el diccionario de opciones para el evento click debería ser “interaction” en lugar de “intercation”.
Además, estás pasando el resultado de la función
display_page
como argumento a la clave “event”, en lugar de la función en sí misma. Debes eliminar los paréntesis después dedisplay_page
.Aquí está el diccionario de opciones corregido:
Ten en cuenta que la clave “nodes” debería tener el valor
["1"]
en lugar de["'1'"]
.Con estos cambios, el evento click debería funcionar como se espera.