某些背景...
我是python和networkx的初学者...
我有一个包含多列的csv文件。
我已提取包含发送者和接收者地址的列,并将它们放入列表中,如下所示:
with open('file.csv,'r') as csv_file:
lines = csv_file.readlines()
sip = []
dip = []
for line in lines:
data = line.split(',')
sip.append(data[9])
dip.append(data[10])
nodes=list(set().union(sip,dip))
edges=list(set().union(list(zip(sip,dip))))
我的G.nodes()和G.edges()的快速打印给我以下输出:
edges = [('AddressA','AddressB'),('AddressA','AddressC')]
nodes = ['AddressA','AddressB','AddressC']
其中edges = [('senderaddress','receiveraddress')] >>
我的目标
我希望使用networkx绘制发送者和接收者之间的连接。
我正在使用此page作为参考。
这是我当前的代码:
import plotly.graph_objs as go import networkx as nx from plotly.subplots import make_subplots #######CREATE NODES/EDGES############# G=nx.Graph() nodes=list(set().union(sip,dip)) edges=list(set().union(list(zip(sip,dip)))) G.add_nodes_from(nodes) G.add_edges_from(edges) pos = nx.get_node_attributes(G,'pos') 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=[], y=[], text=[], mode='markers', hoverinfo='text', marker=dict( showscale=True, 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.nodes[node]['pos'] node_trace['x'] += tuple([x]) node_trace['y'] += tuple([y]) # ########COLOR NODES######### for node, adjacencies in enumerate(G.adjacency()): node_trace['marker']['color']+=tuple([len(adjacencies[1])]) node_info = '# of connections: '+str(len(adjacencies[1])) node_trace['text']+=tuple([node_info]) # ########CREATE GRAPH######### fig = go.Figure(data=[edge_trace, node_trace], layout=go.Layout( title='<br>Network graph made with Python', 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))) fig.show()
但是,我最终遇到此错误:
x0, y0 = G.nodes[edge[0]]['pos'] KeyError: 'pos'
打印结果显示它为空:
{}
我不确定错误在哪里。我相信自从我用节点和边填充图形以来,它可能已经开始。我不确定如何纠正它...
某些背景...我是python和networkx的初学者。我有一个包含多列的csv文件。我已经提取了包含发送者和接收者地址的列,并将它们放入...
我修改了部分已发布的代码。直接从有问题的输出中给出节点和边。