Mar-15-2020, 10:54 AM
Hi All,
I've posted a question here about creating an interactive plot using plotly.
Could someone look into this ?
EDIT:
I'm updating the content here
I've a graph created in Networkx and plotted using plotly
Code:
![[Image: gywNT.png]](https://i.stack.imgur.com/gywNT.png)
The time-series data of nodes in the above graph is read from data frame columns plotted as below
I found this, we could select and deselect lines in the plot by clicking on the legend. Likewise, I'd like to select and deselect lines by clicking on the nodes in Networkx graph.
Any suggestions on how to do this will be really helpful.
Thanks a lot
I've posted a question here about creating an interactive plot using plotly.
Could someone look into this ?
EDIT:
I'm updating the content here
I've a graph created in Networkx and plotted using plotly
Code:
def get_node_trace(G): node_x = [] node_y = [] for node in G.nodes(): x, y = G.nodes[node]['pos'] node_x.append(x) node_y.append(y) node_trace = go.Scatter( x=node_x, y=node_y, 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_width=2)) return node_trace if __name__ == '__main__': tail = [1, 2, 3] head = [2, 3, 4] xpos = [0, 1, 2, 3] ypos = [0, 0, 0, 0] xpos_ypos = [(x, y) for x, y in zip(xpos, ypos)] ed_ls = [(x, y) for x, y in zip(tail, head)] G = nx.OrderedDiGraph() G.add_edges_from(ed_ls) pos = OrderedDict(zip(G.nodes, xpos_ypos)) nx.draw(G, pos=pos, with_labels=True) nx.set_node_attributes(G, pos, 'pos') plt.show() # convert to plotly graph edge_trace = get_edge_trace(G) node_trace = get_node_trace(G) pprint(edge_trace) pprint(node_trace) 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( 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)) ) fig.write_html('plot.html', auto_open=True)
![[Image: gywNT.png]](https://i.stack.imgur.com/gywNT.png)
The time-series data of nodes in the above graph is read from data frame columns plotted as below
import plotly.graph_objects as go import numpy as np import pandas as pd df = pd.DataFrame(np.random.randint(0, 100, size=(20, 5)), columns=list('tABCD')) fig = go.Figure() fig.add_trace(go.Scatter( x=df.t, y=df['A'], name="1", line_color='deepskyblue', opacity=0.8)) fig.add_trace(go.Scatter( x=df.t, y=df['B'], name="2", line_color='dimgray', opacity=0.8)) fig.add_trace(go.Scatter( x=df.t, y=df['C'], name="3", line_color='blue', opacity=0.8)) fig.add_trace(go.Scatter( x=df.t, y=df['D'], name="4", line_color='red', opacity=0.8)) fig.write_html('ts.html', auto_open=True)I want to link the above two plots, i.e. I want to make the plots interactive. For instance, I'd like to have two subplots with time-series plot on the left and Networkx graph on the right. I would like to display the time-series plots corresponding to the nodes that are selected on the Networkx graph. Example, if nodes labelled 1 and 4 are selected, the time-series data corresponding to name= 1 and name = 4 should be displayed on the left.
I found this, we could select and deselect lines in the plot by clicking on the legend. Likewise, I'd like to select and deselect lines by clicking on the nodes in Networkx graph.
Any suggestions on how to do this will be really helpful.
Thanks a lot