In [1]:
import plotly
plotly.offline.init_notebook_mode();
import plotly.graph_objs as go


import igraph as ig


import json
import urllib2

data = []
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())

print data.keys()


[u'nodes', u'links']

In [2]:
N=len(data['nodes'])
L=len(data['links'])
print N,L


77 254

In [3]:
Edges=[(data['links'][k]['source'], data['links'][k]['target']) for k in range(L)]

G=ig.Graph(Edges, directed=False)

labels=[]
group=[]
for node in data['nodes']:
    labels.append(node['name'])
    group.append(node['group'])
    
layt=G.layout('kk', dim=3) 
layt[5]


Out[3]:
[-4.101888193537673, 3.0512783661777942, 0.17396267300893434]

In [4]:
Xn=[layt[k][0] for k in range(N)]# x-coordinates of nodes
Yn=[layt[k][1] for k in range(N)]# y-coordinates
Zn=[layt[k][2] for k in range(N)]# z-coordinates
Xe=[]
Ye=[]
Ze=[]
for e in Edges:
    Xe+=[layt[e[0]][0],layt[e[1]][0], None]# x-coordinates of edge ends
    Ye+=[layt[e[0]][1],layt[e[1]][1], None]  
    Ze+=[layt[e[0]][2],layt[e[1]][2], None]  
    
print Xe


[-5.560694215826674, -4.965532370428075, None, -4.805108697541183, -4.965532370428075, None, -5.354346066506702, -4.965532370428075, None, -5.354346066506702, -4.805108697541183, None, -6.201967705469168, -4.965532370428075, None, -4.101888193537673, -4.965532370428075, None, -4.624842383549432, -4.965532370428075, None, -5.21695760160661, -4.965532370428075, None, -5.734845716107892, -4.965532370428075, None, -4.550033343862704, -4.965532370428075, None, -4.706332346662943, -5.655441899638647, None, -4.706332346662943, -5.354346066506702, None, -4.706332346662943, -4.805108697541183, None, -4.706332346662943, -4.965532370428075, None, -3.523042100349028, -4.706332346662943, None, -4.069722690359113, -4.706332346662943, None, -5.919820638258011, -4.706332346662943, None, -5.82989581138502, -4.706332346662943, None, -2.529721157535945, -3.1987540402467864, None, -2.523288521806446, -3.1987540402467864, None, -2.523288521806446, -2.529721157535945, None, -2.336213799064189, -3.1987540402467864, None, -2.336213799064189, -2.529721157535945, None, -2.336213799064189, -2.523288521806446, None, -2.409082951366273, -3.1987540402467864, None, -2.409082951366273, -2.529721157535945, None, -2.409082951366273, -2.523288521806446, None, -2.409082951366273, -2.336213799064189, None, -2.3292916571934743, -3.1987540402467864, None, -2.3292916571934743, -2.529721157535945, None, -2.3292916571934743, -2.523288521806446, None, -2.3292916571934743, -2.336213799064189, None, -2.3292916571934743, -2.409082951366273, None, -2.275684494751602, -3.1987540402467864, None, -2.275684494751602, -2.529721157535945, None, -2.275684494751602, -2.523288521806446, None, -2.275684494751602, -2.336213799064189, None, -2.275684494751602, -2.409082951366273, None, -2.275684494751602, -2.3292916571934743, None, -3.3036540844895956, -3.1987540402467864, None, -3.3036540844895956, -2.529721157535945, None, -3.3036540844895956, -2.523288521806446, None, -3.3036540844895956, -2.336213799064189, None, -3.3036540844895956, -2.409082951366273, None, -3.3036540844895956, -2.3292916571934743, None, -3.3036540844895956, -2.275684494751602, None, -3.3036540844895956, -3.523042100349028, None, -3.3036540844895956, -4.706332346662943, None, -3.743056436161642, -3.3036540844895956, None, -3.743056436161642, -4.706332346662943, None, -4.1525636724219295, -3.743056436161642, None, -4.1525636724219295, -3.3036540844895956, None, -4.1525636724219295, -4.706332346662943, None, -4.1692313497927165, -3.743056436161642, None, -4.1692313497927165, -4.706332346662943, None, -4.1692313497927165, -3.1987540402467864, None, -4.1692313497927165, -4.1525636724219295, None, -4.326064508470061, -4.706332346662943, None, -4.326064508470061, -3.3036540844895956, None, -4.326064508470061, -4.1525636724219295, None, -4.326064508470061, -3.743056436161642, None, -4.326064508470061, -4.1692313497927165, None, -4.242187511773663, -4.706332346662943, None, -4.242187511773663, -4.326064508470061, None, -4.089114343827, -3.3036540844895956, None, -4.089114343827, -4.326064508470061, None, -4.089114343827, -4.706332346662943, None, -2.375361517049158, -3.3036540844895956, None, -3.511970209605139, -2.375361517049158, None, -3.511970209605139, -4.706332346662943, None, -3.511970209605139, -3.3036540844895956, None, -3.511970209605139, -4.326064508470061, None, -5.897198289992355, -4.706332346662943, None, -4.109640560409346, -4.706332346662943, None, -4.109640560409346, -4.326064508470061, None, -5.259751155240115, -4.706332346662943, None, -5.259751155240115, -4.089114343827, None, -4.961003879989562, -4.706332346662943, None, -4.961003879989562, -5.259751155240115, None, -4.961003879989562, -4.089114343827, None, -4.737282863675162, -5.259751155240115, None, -4.737282863675162, -4.961003879989562, None, -4.737282863675162, -4.706332346662943, None, -4.737282863675162, -4.089114343827, None, -5.345487943558631, -5.259751155240115, None, -5.345487943558631, -4.961003879989562, None, -5.345487943558631, -4.737282863675162, None, -5.345487943558631, -4.706332346662943, None, -5.345487943558631, -4.089114343827, None, -4.719169705392294, -5.259751155240115, None, -4.719169705392294, -4.961003879989562, None, -4.719169705392294, -4.737282863675162, None, -4.719169705392294, -5.345487943558631, None, -4.719169705392294, -4.706332346662943, None, -4.719169705392294, -4.089114343827, None, -3.9967601938684973, -4.1525636724219295, None, -3.36707767062058, -4.1525636724219295, None, -4.240259249086378, -3.743056436161642, None, -4.240259249086378, -4.1525636724219295, None, -3.359221288584062, -4.240259249086378, None, -3.359221288584062, -4.1525636724219295, None, -3.359221288584062, -3.743056436161642, None, -4.67008203730199, -4.706332346662943, None, -4.67008203730199, -4.1692313497927165, None, -4.67008203730199, -4.326064508470061, None, -4.0671331354549025, -4.242187511773663, None, -4.0671331354549025, -4.706332346662943, None, -4.273029451098586, -4.242187511773663, None, -5.47484769498447, -5.828764882861165, None, -5.298205404147953, -5.47484769498447, None, -5.298205404147953, -4.1525636724219295, None, -5.298205404147953, -4.326064508470061, None, -5.298205404147953, -4.706332346662943, None, -4.553184038177683, -4.1692313497927165, None, -4.553184038177683, -4.706332346662943, None, -3.3835578683751466, -4.553184038177683, None, -3.3835578683751466, -3.743056436161642, None, -5.038689885980256, -4.553184038177683, None, -5.038689885980256, -4.1692313497927165, None, -5.038689885980256, -4.706332346662943, None, -4.361676248709088, -5.038689885980256, None, -4.361676248709088, -3.9967601938684973, None, -5.678131418999221, -5.038689885980256, None, -4.8655704117680765, -5.038689885980256, None, -4.8655704117680765, -4.553184038177683, None, -4.8655704117680765, -4.1692313497927165, None, -4.687678090110293, -5.038689885980256, None, -4.687678090110293, -4.553184038177683, None, -4.687678090110293, -3.9967601938684973, None, -4.687678090110293, -4.8655704117680765, None, -4.687678090110293, -4.1692313497927165, None, -4.687678090110293, -4.706332346662943, None, -4.687678090110293, -3.1987540402467864, None, -4.687678090110293, -4.1525636724219295, None, -4.687678090110293, -4.240259249086378, None, -4.687678090110293, -5.298205404147953, None, -4.632686812027957, -4.553184038177683, None, -4.632686812027957, -4.687678090110293, None, -4.852534524092353, -4.687678090110293, None, -4.852534524092353, -4.240259249086378, None, -4.852534524092353, -5.298205404147953, None, -5.294664506499167, -4.687678090110293, None, -5.294664506499167, -5.298205404147953, None, -5.294664506499167, -4.326064508470061, None, -5.294664506499167, -4.852534524092353, None, -5.294664506499167, -4.706332346662943, None, -5.5959733636532905, -5.294664506499167, None, -5.5959733636532905, -4.687678090110293, None, -5.5959733636532905, -5.298205404147953, None, -5.5959733636532905, -4.852534524092353, None, -6.068071917516237, -5.298205404147953, None, -6.068071917516237, -5.294664506499167, None, -6.068071917516237, -5.5959733636532905, None, -5.331620081471284, -5.298205404147953, None, -5.331620081471284, -5.294664506499167, None, -5.331620081471284, -6.068071917516237, None, -5.331620081471284, -5.5959733636532905, None, -5.331620081471284, -4.852534524092353, None, -5.331620081471284, -4.687678090110293, None, -5.234931560082234, -4.687678090110293, None, -5.234931560082234, -5.294664506499167, None, -5.234931560082234, -5.5959733636532905, None, -5.234931560082234, -5.298205404147953, None, -5.234931560082234, -4.852534524092353, None, -5.234931560082234, -4.240259249086378, None, -5.234931560082234, -5.331620081471284, None, -5.234931560082234, -6.068071917516237, None, -5.834355383879059, -5.5959733636532905, None, -5.834355383879059, -5.298205404147953, None, -5.834355383879059, -5.234931560082234, None, -5.834355383879059, -4.852534524092353, None, -5.834355383879059, -5.294664506499167, None, -5.834355383879059, -5.331620081471284, None, -5.834355383879059, -6.068071917516237, None, -5.834355383879059, -4.687678090110293, None, -5.589099444447893, -4.687678090110293, None, -5.589099444447893, -5.234931560082234, None, -5.589099444447893, -5.298205404147953, None, -5.589099444447893, -5.834355383879059, None, -5.589099444447893, -5.294664506499167, None, -5.589099444447893, -5.331620081471284, None, -5.589099444447893, -6.068071917516237, None, -5.589099444447893, -5.5959733636532905, None, -5.589099444447893, -4.852534524092353, None, -5.589099444447893, -4.706332346662943, None, -5.561216283839599, -5.834355383879059, None, -5.561216283839599, -5.589099444447893, None, -5.561216283839599, -5.298205404147953, None, -5.561216283839599, -5.234931560082234, None, -5.561216283839599, -5.294664506499167, None, -5.561216283839599, -5.331620081471284, None, -5.561216283839599, -6.068071917516237, None, -5.561216283839599, -5.5959733636532905, None, -5.561216283839599, -4.852534524092353, None, -5.561216283839599, -4.687678090110293, None, -6.341575259082385, -5.589099444447893, None, -6.341575259082385, -5.294664506499167, None, -6.341575259082385, -5.5959733636532905, None, -6.341575259082385, -5.234931560082234, None, -6.341575259082385, -5.561216283839599, None, -6.341575259082385, -5.298205404147953, None, -6.341575259082385, -5.834355383879059, None, -6.341575259082385, -5.331620081471284, None, -6.341575259082385, -6.068071917516237, None, -4.947181863669476, -4.852534524092353, None, -4.741813392177436, -4.1525636724219295, None, -4.741813392177436, -4.706332346662943, None, -4.741813392177436, -3.743056436161642, None, -4.741813392177436, -4.326064508470061, None, -4.741813392177436, -5.298205404147953, None, -4.741813392177436, -4.240259249086378, None, -4.548267876046892, -4.1525636724219295, None, -4.548267876046892, -4.741813392177436, None, -4.548267876046892, -4.706332346662943, None, -4.548267876046892, -3.743056436161642, None, -4.548267876046892, -4.326064508470061, None, -4.548267876046892, -5.298205404147953, None, -4.548267876046892, -4.240259249086378, None, -4.272404294590188, -4.1525636724219295, None, -4.272404294590188, -4.548267876046892, None, -4.272404294590188, -4.741813392177436, None, -4.272404294590188, -4.706332346662943, None, -4.272404294590188, -3.743056436161642, None, -4.272404294590188, -4.326064508470061, None, -4.272404294590188, -4.240259249086378, None, -4.272404294590188, -5.294664506499167, None, -4.982111418163617, -4.326064508470061, None, -4.982111418163617, -4.548267876046892, None, -4.982111418163617, -4.741813392177436, None, -4.982111418163617, -4.272404294590188, None, -4.982111418163617, -4.706332346662943, None, -4.982111418163617, -5.298205404147953, None, -4.982111418163617, -4.240259249086378, None, -4.982111418163617, -4.1525636724219295, None, -4.0829179881848985, -4.1692313497927165, None, -4.0829179881848985, -4.326064508470061, None, -4.0829179881848985, -4.706332346662943, None, -6.095345957580791, -5.298205404147953, None, -6.581248079611325, -5.298205404147953, None, -6.581248079611325, -6.095345957580791, None, -4.518977888556929, -4.548267876046892, None, -4.518977888556929, -4.741813392177436, None, -4.518977888556929, -4.1525636724219295, None, -4.518977888556929, -5.298205404147953, None, -4.518977888556929, -4.240259249086378, None, -4.518977888556929, -4.272404294590188, None, -4.518977888556929, -4.982111418163617, None, -6.205452088588306, -5.589099444447893, None, -6.205452088588306, -5.561216283839599, None, -6.205452088588306, -6.341575259082385, None, -6.205452088588306, -5.834355383879059, None, -6.205452088588306, -5.234931560082234, None, -6.205452088588306, -5.298205404147953, None, -6.205452088588306, -5.294664506499167, None]

In [5]:
trace1=go.Scatter3d(x=Xe,
               y=Ye,
               z=Ze,
               mode='lines',
               #line=dict(color='rgb(125,125,125)', width=1),
               hoverinfo='none'
               )
print trace1
plotly.offline.iplot({"data":[trace1]})


Scatter3d({
    'hoverinfo': 'none',
    'mode': 'lines',
    'x': [-5.56069421583, -4.96553237043, None, ..., -6.20545208859,
          -5.2946645065, None],
    'y': [3.41886007874, 2.25479169874, None, ..., 1.47807149856, 0.940958536471,
          None],
    'z': [-0.610220557841, -0.444584627411, None, ..., -3.06092442619,
          -2.41784176968, None]
})

In [6]:
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)

plotly.offline.iplot(fig, filename='Les-Miserables')



In [ ]: