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.

cómo agregar peso a los nodos utilizando un diccionario

He creado el diccionario para el diagrama:

dict_exports = {}

En cuanto al diagrama de red, el cual funciona correctamente pero no cambia el peso de los nodos:

# cambiemos un poco la función para utilizar esta nueva información
def plot_subgraph_trade(COUNTRY, FILTER, dict_exports, myDataTrade, FILTER_YEAR, FILTER_TYPE):
myDataTradeSWE = myDataTrade[(myDataTrade['from']==COUNTRY) & (myDataTrade['VAL']>FILTER) & (myDataTrade['Year']==FILTER_YEAR) & (myDataTrade['type']==FILTER_TYPE)]

G = nx.Graph() # crea el objeto vacío

# esto nos permite iterar sobre los valores del dataframe
for index, x in myDataTradeSWE.iterrows():
    G.add_edge(x['from'], x['to'], w=x['VAL'])

color_code = []  # esta es la lista para los bordes en este caso
for i in G.edges():
    color_code.append(G[i[0]][i[1]]['w'])

nodes_label = {}
n_size = []
for i in G.nodes():
    nodes_label[i] = str(i)
    n_size.append(dict_exports[i]/1000000.)  # dividimos por 1M solo para que sea visible

# graficarlo
plt.figure(1, figsize=(8, 8))
plt.title('Red de Comercio de Alta Tecnología de ' + COUNTRY + ' en ' + str(FILTER_YEAR))
nx.draw(G, pos=nx.kamada_kawai_layout(G), alpha=0.9, node_size=500, width=4, edge_cmap=plt.cm.Purples, edge_color=color_code, node_color='#A0CBE2', labels=nodes_label, font_size=11, font_color='Black')
COUNTRY = 'SWE'
FILTER = 250000
FILTER_YEAR = 2016
FILTER_TYPE = 'High_Tech'

plot_subgraph_trade(COUNTRY,FILTER,dict_exports,myDataTrade,FILTER_YEAR,FILTER_TYPE)

El diccionario no se ejecutará correctamente. ¿Cómo puedo hacer que el diccionario se integre con el resto del código?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para integrar el diccionario dict_exports con el resto del código, debes pasarlo como argumento a la función plot_sub_graph_trade cuando se llame. Luego, dentro de la función, puedes usarlo para asignar los tamaños de los nodos basado en los valores del diccionario.

    Aquí tienes un ejemplo de cómo modificar el código para integrar correctamente el diccionario:

    def plot_sub_graph_trade(COUNTRY, FILTER, dict_exports, myDataTrade, FILTER_YEAR, FILTER_TYPE):
    
        myDataTradeSWE = myDataTrade[(myDataTrade['from']==COUNTRY) & (myDataTrade['VAL']>FILTER) & (myDataTrade['Year']==FILTER_YEAR) & (myDataTrade['type']==FILTER_TYPE)]
    
        G = nx.Graph() # crea el objeto vacío
    
        # esto nos permite iterar sobre los valores del dataframe
        for index, x in myDataTradeSWE.iterrows():
            G.add_edge(x['from'], x['to'], w=x['VAL'])
    
        color_code=[]  # esta es la lista para los bordes en este caso
        for i in G.edges():
            color_code.append(G[i[0]][i[1]]['w'])  
    
        nodes_label={}
        n_size=[]
        for i in G.nodes():
            nodes_label[i] = str(i)
            n_size.append(dict_exports.get(i, 0) / 1000000.) # obtén el valor del diccionario o usa 0 si no está en él
    
        # vamos a representarlo
        plt.figure(1, figsize=(8, 8)) 
        plt.title('Red de Comercio de Alta Tecnología de ' + COUNTRY + ' en ' + str(FILTER_YEAR))
        nx.draw(G, pos=nx.kamada_kawai_layout(G), alpha=0.9,
                node_size=[500 * s for s in n_size], # escala los tamaños de los nodos por un factor de 500
                width=4, edge_cmap=plt.cm.Purples, edge_color=color_code,
                node_color='#A0CBE2', labels=nodes_label, font_size=11, font_color='Black')
    

    Luego, al llamar a la función, asegúrate de pasar el diccionario dict_exports como argumento:

    COUNTRY = 'SWE'
    FILTER = 250000
    FILTER_YEAR = 2016
    FILTER_TYPE = 'High_Tech'
    
    plot_sub_graph_trade(COUNTRY, FILTER, dict_exports, myDataTrade, FILTER_YEAR, FILTER_TYPE)
    

Comments are closed.