Saltar al contenido

El tamaño del nodo depende del grado del nodo en NetworkX

Este equipo de expertos luego de varios días de trabajo y de recopilar de información, han obtenido la respuesta, nuestro deseo es que resulte útil para ti en tu proyecto.

Solución:

Actualización para aquellos que usan networkx 2.x

La API ha cambiado de v1.x a v2.x. networkx.degree ya no devuelve un dict pero un DegreeView Objeto según la documentación.

Hay una guía para migrar de 1.x a 2.x aquí.

En este caso, básicamente se reduce a usar dict(g.degree) en lugar de d = nx.degree(g).

El código actualizado se ve así:

import networkx as nx
import matplotlib.pyplot as plt

g = nx.Graph()
g.add_edges_from([(1,2), (2,3), (2,4), (3,4)])

d = dict(g.degree)

nx.draw(g, nodelist=d.keys(), node_size=[v * 100 for v in d.values()])
plt.show()

nx.degree(p) devuelve un dict mientras que el argumento keywod node_size necesita un escalar o un array de tamaños Puede usar el dict nx.degree devuelve así:

import networkx as nx
import matplotlib.pyplot as plt

g = nx.Graph()
g.add_edges_from([(1,2), (2,3), (2,4), (3,4)])

d = nx.degree(g)

nx.draw(g, nodelist=d.keys(), node_size=[v * 100 for v in d.values()])
plt.show()

ingrese la descripción de la imagen aquí

@miles82 proporcionó una gran respuesta. Sin embargo, si ya agregó los nodos a su gráfico usando algo como G.add_nodes_from(nodes)luego descubrí que d = nx.degree(G) puede que no devuelva los grados en el mismo orden que sus nodos.

Partiendo de la respuesta anterior, puede modificar la solución ligeramente para asegurarse de que los grados estén en el orden correcto:

d = nx.degree(G)
d = [(d[node]+1) * 20 for node in G.nodes()]

Nota la d[node]+1que se asegurará de que se agreguen nodos de grado cero al gráfico.

valoraciones y comentarios

Recuerda que puedes comunicar esta crónica si te ayudó.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *