如何解决带网络图的时间选择器
我正在使用具有公司电子邮件流量的数据集(安然数据集的修改版本)进行网络图可视化。在这张图中,我将所有在公司工作的人作为节点,将这些人之间的所有电子邮件作为边。因为有很多边缘,所以我想为时间制作一个范围滑块,并且只显示在这个时间段内发送的邮件。我将日期作为边缘的属性,但我不知道如何为此制作范围滑块以及如何制作它以便某些边缘可见而其他边缘则不可见。我发现的唯一滑块在 x 轴上工作,但因为时间不是两个轴上的变量,我不能使用它。 我还尝试制作一个下拉菜单,您只能在其中选择年份,但我也无法使其与边缘属性一起使用。所以我的问题是:如何制作滑块或下拉菜单来选择某个时间段并仅显示该时间段内的边缘? 我必须制作网络图的代码
df_enron = pd.read_csv('enron-v1.csv',parse_dates=['date']) #reading the enron csv and storing it as dataframe
#get a list of all the years in the dataset
df_enron['year'] = pd.DatetimeIndex(df_enron['date']).year
years = list(df_enron['year'].unique())
mailsenders = list(df_enron["fromId"].unique()) #define the senders and receivers as nodes
mailreceivers = list(df_enron["toId"].unique())
jobtitles = list(df_enron['fromJobtitle'].unique()) #list of all the job titles
jobtitlesindex = jobtitles.copy()
node_list = list(set(mailsenders+mailreceivers)) #list of everything that needs to be a node
G = nx.Graph() #defining the graph
jobtitlescount = len(jobtitles) #amount of functions in the company
for i in node_list:
G.add_node(i) #adding every node to the graph
for i,j in df_enron.iterrows(): #adding the edges
G.add_edges_from([(j["fromId"],j["toId"],{"date": df_enron['date'].loc[i]})])
#actually making the graph with plotly
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.nodes[edge[0]]['pos']
x1,y1 = G.nodes[edge[1]]['pos']
edge_trace['x'] += tuple([x0,x1,None])
edge_trace['y'] += tuple([y0,y1,None])
node_trace = go.Scatter(
x=[],text=[],mode='markers',hoverinfo='text',marker=dict(
showscale=True,colorscale='RdBu',reversescale=True,color=[],size=15,colorbar=dict(
thickness=10,title='Node Connections',xanchor='left',titleside='right'
),line=dict(width=0)))
for node in G.nodes():
x,y = G.nodes[node]['pos']
node_trace['x'] += tuple([x])
node_trace['y'] += tuple([y])
#adding annotations to the nodes and edges
for node,adjacencies in enumerate(G.adjacency()):
node_trace['marker']['color']+=tuple([len(adjacencies[1])])
node_info = G.nodes[node+1]['Title']+',ID: '+adjacencies[0].astype(str) +',# of connections: '+str(len(adjacencies[1])) + ',sentiment: ' + str(G.nodes[node+1]['sentiment']) #DE .astype(str) IS TOEGEVOEGD
node_trace['text']+=tuple([node_info])
#actually plotting the graph
fig = go.figure(data=[edge_trace,node_trace],layout=go.Layout(
title='<br>Enron email traffic',titlefont=dict(size=16),showlegend=False,hovermode='closest',margin=dict(b=20,l=5,r=5,t=40),annotations=[ dict(
text="No. of connections",showarrow=False,xref="paper",yref="paper") ],xaxis=dict(showgrid=False,zeroline=False,showticklabels=False),yaxis=dict(showgrid=False,showticklabels=False)))
iplot(fig)
结果图如下: Plot with grouping by jobtitle 如果有人有任何想法/提示,他们真的会帮助我!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。