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.

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')
Tags:  , , , ,

Answer

  1. Avatar for 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 de display_page.

    Aquí está el diccionario de opciones corregido:

    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
    }}}
    

    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.

Comments are closed.