Show Sidebar Hide Sidebar

# Network Graphs in Python

How to make Network Graphs in Python with Plotly. One examples of a network graph with NetworkX

#### New to Plotly?¶

You can set up Plotly to work in online or offline mode, or in jupyter notebooks.
We also have a quick-reference cheatsheet (new!) to help you get started!# Network Graphs with Plotly.

Install the Python library networkx with sudo pip install networkx.

#### Get Node Positions¶

Store position as node attribute data for random_geometric_graph and find node near center (0.5, 0.5)

In [1]:
import plotly.plotly as py
import plotly.graph_objs as go

import networkx as nx

G=nx.random_geometric_graph(200,0.125)
pos=nx.get_node_attributes(G,'pos')

dmin=1
ncenter=0
for n in pos:
x,y=pos[n]
d=(x-0.5)**2+(y-0.5)**2
if d<dmin:
ncenter=n
dmin=d

p=nx.single_source_shortest_path_length(G,ncenter)


#### Create Edges¶

Add edges as disconnected lines in a single trace and nodes as a scatter trace

In [2]:
edge_trace = go.Scatter(
x=[],
y=[],
line=dict(width=0.5,color='#888'),
hoverinfo='none',
mode='lines')

for edge in G.edges():
x0, y0 = G.node[edge[0]]['pos']
x1, y1 = G.node[edge[1]]['pos']
edge_trace['x'] += tuple([x0, x1, None])
edge_trace['y'] += tuple([y0, y1, None])

node_trace = go.Scatter(
x=[],
y=[],
text=[],
mode='markers',
hoverinfo='text',
marker=dict(
showscale=True,
# colorscale options
#'Greys' | 'YlGnBu' | 'Greens' | 'YlOrRd' | 'Bluered' | 'RdBu' |
#'Reds' | 'Blues' | 'Picnic' | 'Rainbow' | 'Portland' | 'Jet' |
#'Hot' | 'Blackbody' | 'Earth' | 'Electric' | 'Viridis' |
colorscale='YlGnBu',
reversescale=True,
color=[],
size=10,
colorbar=dict(
thickness=15,
title='Node Connections',
xanchor='left',
titleside='right'
),
line=dict(width=2)))

for node in G.nodes():
x, y = G.node[node]['pos']
node_trace['x'] += tuple([x])
node_trace['y'] += tuple([y])


#### Color Node Points¶

Color node points by the number of connections.

Another option would be to size points by the number of connections i.e. node_trace['marker']['size'].append(len(adjacencies))

In [3]:
for node, adjacencies in enumerate(G.adjacency()):
node_info = '# of connections: '+str(len(adjacencies[1]))
node_trace['text']+=tuple([node_info])


#### Create Network Graph¶

In [4]:
fig = go.Figure(data=[edge_trace, node_trace],
layout=go.Layout(
titlefont=dict(size=16),
showlegend=False,
hovermode='closest',
margin=dict(b=20,l=5,r=5,t=40),
annotations=[ dict(
text="Python code: <a href='https://plot.ly/ipython-notebooks/network-graphs/'> https://plot.ly/ipython-notebooks/network-graphs/</a>",
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)))

py.iplot(fig, filename='networkx')

Out[4]: