Skip to content

Latest commit

 

History

History
212 lines (174 loc) · 5.72 KB

3d-network-graph.md

File metadata and controls

212 lines (174 loc) · 5.72 KB
jupyter
jupytextkernelspecplotly
notebook_metadata_filtertext_representation
all
extensionformat_nameformat_versionjupytext_version
.md
markdown
1.1
1.1.1
display_namelanguagename
Python 2
python
python2
descriptiondisplay_aslanguagelayoutnameorderpage_typepermalinkthumbnail
How to make 3D Network Graphs in Python.
3d_charts
python
base
3D Network Graphs
13
example_index
python/3d-network-graph/
thumbnail/3dnetwork.jpg

New to Plotly?

Plotly's Python library is free and open source! Get started by downloading the client and reading the primer.
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 reflecting coappearances of characters in
Victor Hugo's novel Les Miserables

We define our graph as an igraph.Graph object. Python igraph is a library for high-performance graph generation and analysis. Install the Python library with sudo pip install igraph.

importigraphasig

Read graph data from a json file:

importjsonimporturllib2data= [] req=urllib2.Request("https://raw.githubusercontent.com/plotly/datasets/master/miserables.json") opener=urllib2.build_opener() f=opener.open(req) data=json.loads(f.read()) printdata.keys()

Get the number of nodes:

N=len(data['nodes']) N

Define the list of edges and the Graph object from Edges:

L=len(data['links']) Edges=[(data['links'][k]['source'], data['links'][k]['target']) forkinrange(L)] G=ig.Graph(Edges, directed=False)

Extract the node attributes, 'group', and 'name':

data['nodes'][0]
labels=[] group=[] fornodeindata['nodes']: labels.append(node['name']) group.append(node['group'])

Get the node positions, set by the Kamada-Kawai layout for 3D graphs:

layt=G.layout('kk', dim=3)

layt is a list of three elements lists (the coordinates of nodes):

layt[5]

Set data for the Plotly plot of the graph:

Xn=[layt[k][0] forkinrange(N)]# x-coordinates of nodesYn=[layt[k][1] forkinrange(N)]# y-coordinatesZn=[layt[k][2] forkinrange(N)]# z-coordinatesXe=[] Ye=[] Ze=[] foreinEdges: Xe+=[layt[e[0]][0],layt[e[1]][0], None]# x-coordinates of edge endsYe+=[layt[e[0]][1],layt[e[1]][1], None] Ze+=[layt[e[0]][2],layt[e[1]][2], None]
importplotly.plotlyaspyimportplotly.graph_objsasgotrace1=go.Scatter3d(x=Xe, y=Ye, z=Ze, mode='lines', line=dict(color='rgb(125,125,125)', width=1), hoverinfo='none' ) trace2=go.Scatter3d(x=Xn, y=Yn, z=Zn, mode='markers', name='actors', marker=dict(symbol='circle', size=6, color=group, colorscale='Viridis', line=dict(color='rgb(50,50,50)', width=0.5) ), text=labels, hoverinfo='text' ) axis=dict(showbackground=False, showline=False, zeroline=False, showgrid=False, showticklabels=False, title='' ) layout=go.Layout( title="Network of coappearances of characters in Victor Hugo's novel<br> Les Miserables (3D visualization)", width=1000, height=1000, showlegend=False, scene=dict( xaxis=dict(axis), yaxis=dict(axis), zaxis=dict(axis), ), margin=dict( t=100 ), hovermode='closest', annotations=[ dict( showarrow=False, text="Data source: <a href='http://bost.ocks.org/mike/miserables/miserables.json'>[1] miserables.json</a>", xref='paper', yref='paper', x=0, y=0.1, xanchor='left', yanchor='bottom', font=dict( size=14 ) ) ], )
data=[trace1, trace2] fig=go.Figure(data=data, layout=layout) py.iplot(fig, filename='Les-Miserables')

Reference

See https://plot.ly/python/reference/#scatter3d for more information and chart attribute options!

fromIPython.displayimportdisplay, HTMLdisplay(HTML('<link href="//fonts.googleapis.com/css?family=Open+Sans:600,400,300,200|Inconsolata|Ubuntu+Mono:400,700" rel="stylesheet" type="text/css" />')) display(HTML('<link rel="stylesheet" type="text/css" href="http://help.plot.ly/documentation/all_static/css/ipython-notebook-custom.css">')) ! pipinstallgit+https://github.com/plotly/publisher.git--upgradeimportpublisherpublisher.publish( 'Les-miserables-network.ipynb', 'python/3d-network-graph/', 'Python 3D Network Graphs', 'How to make 3D Network Graphs in Python. ', title='3D Network Graphs in Python | plotly', name='3D Network Graphs', has_thumbnail='true', thumbnail='thumbnail/3dnetwork.jpg', language='python', page_type='example_index', display_as='3d_charts', order=13, ipynb='~notebook_demo/226')
close