3

I am trying to visualize a network analysis chart, using Networks and Plotly. I have two datasets:

  1. EdgeList, containing all the edge information; 2. NodeList having all node information. EdgeLst of example (Not full data): enter image description here

  2. NodeList example (Not full data):

enter image description here I have only visualized the basic network chart, shown as the code below, but only had location and simple information. I wish to show the other columns in the network chart when mouse moves to each node, showing other hover text/information in the dataset. Unfortunately I don't know how to attach or add other fields into the dict or list or tuple in the network. Really appreciate if anyone can help! Here is my current code below:

import plotly.graph_objects as go
import networkx as nx
import pandas as pd


node_list = pd.read_csv("nodelist1.csv")
edge_list = pd.read_csv("edgelist1.csv")

nodes = list(node_list['node'])

edge_list['edge_conn'] = edge_list[['tail', 'head']].apply(tuple, axis=1)
edges = list(edge_list['edge_conn'])

G = nx.Graph()

G.add_nodes_from(nodes)
G.add_edges_from(edges)

pos = nx.layout.spring_layout(G)

  
edge_x = []
edge_y = []

for loc_idx in pos:
  # print (loc_idx, pos[loc_idx])
  x0, y0 = pos[loc_idx]
  edge_x.append(x0)
  edge_y.append(y0)

edge_trace = go.Scatter(
    x=edge_x, y=edge_y,
    line=dict(width=0.5, color='#888'),
    hoverinfo='none',
    mode='lines')

node_x = []
node_y = []

for node_loc in pos:
  x, y = pos[node_loc]
  node_x.append(x)
  node_y.append(y)

node_trace = go.Scatter(
    x=node_x,
    y=node_y,
    mode='markers',
    marker=dict(
        showscale=True,
        colorscale='YlGnBu',
        reversescale=True,
        color=[],
        size=10,
        colorbar=dict(
            thickness=15,
            title='Node Connections',
            xanchor='left',
            titleside='right'
        ),
    line_width=2
))
node_adjacencies = []
node_text = []
for node, adjacencies in enumerate(G.adjacency()):
    node_adjacencies.append(len(adjacencies[1]))
    node_text.append('# of connections: '+str(len(adjacencies[1])))

node_trace.marker.color = node_adjacencies
node_trace.text = node_text

fig = go.Figure(data=[edge_trace, node_trace],
             layout=go.Layout(
                title='<br>Network graph made with Python',
                titlefont_size=16,
                showlegend=False,
                hovermode='closest',
                margin=dict(b=20,l=5,r=5,t=40),
                annotations=[ dict(
                    showarrow=False,
                    xref="paper", yref="paper",
                    x=0.005, y=-0.002 ) ],
                xaxis=dict(showgrid=False, zeroline=False, showticklabels=False),
                yaxis=dict(showgrid=False, zeroline=False, showticklabels=False))
                )
fig.show()
Alice jinx
  • 585
  • 3
  • 15
  • 1
    Hi Alice! I assume you'd prefer anyone trying to answer yout question to do just that instead of reproducing your question. And you can help in that regard. Please don't share your data samples as images. This means we'd have to spend our time typing in your data instead of finding an answer. Share your data [like this](https://stackoverflow.com/questions/63163251/pandas-how-to-easily-share-a-sample-dataframe-using-df-to-dict/63163254#63163254) instead. – vestland Sep 22 '20 at 05:32

0 Answers0