Sustituye las tags de nodo con emoji usando networkX en Python

Estoy usando networkX para dibujar un trazado de red desde una matriz de distancia (emoji_sim, un DataFrame). Aquí está el código:

G = nx.from_numpy_matrix(np.array(emoji_sim)) nx.draw(G, edge_color='silver', node_color='lightsalmon', with_labels=True) plt.show() 

Sé que hay una manera de volver a etiquetar los nodos como:

 G = nx.relabel_nodes(G, dict(zip(range(len(G.nodes())), range(1, len(G.nodes())+1)))) 

Pero quiero sustituir la etiqueta de los nodos con imágenes (posiblemente leer de archivos o usar el paquete Python Emoji). ¿Hay alguna forma de hacer eso? ¡Muchas gracias!

Para aclarar, estoy tratando de sustituir el círculo real con imágenes.

La idea detrás de esto no es muy difícil, pero para que se muestre (al menos en ubunto) me resultó un poco difícil ya que no todas las fonts admiten emoji. Mostraré el camino directo y luego algunos enlaces que me ayudaron al final (tal vez no los necesite).

De la hoja de trucos emoji del paquete emoji python recogí tres para mostrarlos como ejemplo y aquí está el código.

 G = nx.Graph() G.add_nodes_from([0,1,2]) n0 = emoji.emojize(':thumbsup:',use_aliases=True) n1 = emoji.emojize(':sob:',use_aliases=True) n2 = emoji.emojize(':joy:',use_aliases=True) labels ={0:n0,1:n1,2:n2} nx.draw_networkx(G,labels=labels, node_color = 'w', linewidths=0, with_labels=True, font_family = 'Symbola' ,font_size = 35) plt.show() 

introduzca la descripción de la imagen aquí

Dificultades encontradas:

1- Mi máquina está en ubunto 14.04, no pude mostrar ningún emoji, siempre aparecían como rectangularjs

Instaló la fuente necesaria Symbola usando el siguiente comando (mencionado aquí) :

 sudo apt-get install ttf-ancient-fonts 

2- Maplotlib (que networkx llama a dibujar) no está utilizando la fuente instalada.

De varias discusiones útiles 1 2 3 4 5 6 Copié y pegué el archivo de fonts .tff de Symbola en el directorio matplotib predeterminado (donde se obtienen las fonts para usar).

 cp /usr/share/fonts/truetype/ttf-ancient-scripts/Symbola605.ttf /usr/share/matplotlib/mpl-data/fonts/ttf 

Luego tuve que eliminar el archivo fontList.cache para cargar la nueva fuente.

 rm ~/.cache/matplotlib/fontList.cache 

Nota

Puede tener diferentes vistas cambiando la entrada a draw_networkx, por ejemplo, si no envía los linewidths se mostrará un borde circular para cada nodo, también si desea un color de fondo específico para los nodos, cambie el color_node de blanco a un color que desee … Más detalles consultar la documentación .