微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为网络中的不同节点添加颜色

如何解决为网络中的不同节点添加颜色

大家好,

我告诉你一些我正在做的事情。我有一个表,其中包含以下列作为信息:“报告来源”、“报告”和“报告用户”(它们在数据框中还有其他名称,但从概念上讲,这就是它们的意思):

enter image description here

根据这些信息,我使用 netwokx 库和 pyvis 可视化框架成功创建了一个网络。我附上代码

%matplotlib inline
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import networkx as nx
from networkx.drawing.nx_agraph import graphviz_layout
import ipywidgets as widgets
from ipywidgets import interact,interact_manual

#Generar Grafo

df1.insert(1,'ORIGEN','ORIGEN')
paths = df1.loc[:,'ORIGEN':].stack().groupby(level=0).agg(list).values.tolist()
G = nx.DiGraph()
for path in paths:
    nx.add_path(G,path) 

@interact_manual
def grafo(grafo=['neato','dot','twopi','fdp','sfdp','circo']):
        #return df.loc[df[column] > x]
    # Posibilidades para parametro "prog": 'neato',‘dot’,‘twopi’,‘fdp’,‘sfdp’,‘circo’
    pos = graphviz_layout(G,prog= grafo)
    plt.figure(figsize=(20,20))

    nx.draw(G,pos= pos,node_size=40,alpha=0.5,node_color="blue",with_labels=True,arrows=True)

    plt.savefig("dendograma.pdf")
    plt.axis("equal")
    plt.show()
    return 
def draw_graph3(networkx_graph,notebook=True,output_filename='graph.html',show_buttons=True,only_physics_buttons=False):
    """
   Esta función acepta un objeto gráfico "networkx",lo convierte en un objeto de red "pyvis" conservando sus atributos de nodo y borde,y devuelve y guarda una visualización de red dinámica.
    
    Atributos de nodo validos:
        "size","value","title","x","y","label","color".
        
        (Para más información: https://pyvis.readthedocs.io/en/latest/documentation.html#pyvis.network.Network.add_node)
        
    Atributos de vertices validos:
        "arrowStrikethrough","hidden","physics","width"
        
        (Para más información: https://pyvis.readthedocs.io/en/latest/documentation.html#pyvis.network.Network.add_edge)
        
    
    Argumentos:
        networkx_graph: El gráfico para convertir y mostrar
        notebook: ¿Quieres desplegar la visualización en Jupyter Notebook?
        output_filename: Ubicación donde se guardara la red convertida
        show_buttons: ¿Mostrar botones en la versión guardada de la red?
        only_physics_buttons: ¿Mostrar parametros para modificar la red?
    """
    
    # Importacion de librerias
    from pyvis import network as net
    
    # Crear una red de pyvis
    pyvis_graph = net.Network(notebook=notebook,heading='Fuentes Banco Sabadell',directed = True)
    
    # Para cada nodo y sus atributos en el gráfico networkx
    for node,node_attrs in networkx_graph.nodes(data=True):
        pyvis_graph.add_node(str(node),**node_attrs,size = 10)
        
    # para cada vertice y sus atributos en el gráfico networkx
    for source,target,edge_attrs in networkx_graph.edges(data=True):
        # si el valor / ancho no se especifica directamente y se especifica el peso,establezca 'value' en 'weight'
        if not 'value' in edge_attrs and not 'width' in edge_attrs and 'weight' in edge_attrs:
            # colocar en la clave 'value' el peso del vertice
            edge_attrs['value']=edge_attrs['weight']
        # agregar el vértice
        pyvis_graph.add_edge(str(source),str(target),**edge_attrs,arrowStrikethrough = True )
        
    # agregar botones
    if show_buttons:
        if only_physics_buttons:
            pyvis_graph.show_buttons(filter_=['physics'])
        else:
            pyvis_graph.show_buttons()
    
    # regresar grafo y guardar
    return pyvis_graph.show(output_filename)

# Llamada a la función
draw_graph3(G,only_physics_buttons=True)

给我以下网络作为输出

enter image description here

然而,我想要实现的是源节点有颜色,源节点有不同颜色,报告的节点另一个不同,最后用户的最后一个节点有不同的颜色以改善图形。知道怎么做吗?

您好!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。