我在尝试本教程:"Networks on Maps (with Python)"。在原作者的善意帮助下,我已经掌握了大部分工作。它最初是在Python 2.7中创建的,我使用的是3.5。更改包括graphml格式的数据(不是pickle),插入缺少的参数,并指定G = nx.Graph()。检索部分密钥的部分密钥'... - Networkx
我现在坚持朝着错误的结尾:
NameError: name 'part' is not defined.
我有点不确定,如果它是一个2.7-3.5冲突,如果有一个功能缺失?
下面的代码:
import matplotlib.pyplot as plt
import networkx as nx
from mpl_toolkits.basemap import Basemap
import difflib
m = Basemap(projection='robin',lon_0=0,resolution='l')
m.drawcountries(linewidth = 0.5)
m.fillcontinents(color='white',lake_color='white')
m.drawcoastlines(linewidth=0.5)
# load geographic coordinate system for countries
import csv
country = [row[0].strip() for row in csv.reader(open('LonLat.csv'), delimiter=';')] # clear spaces
lat = [float(row[1]) for row in csv.reader(open('LonLat.csv'), delimiter=';')]
lon = [float(row[2]) for row in csv.reader(open('LonLat.csv'), delimiter=';')]
G=nx.Graph()
# define position in basemap
position = {}
for i in range(0, len(country)):
position[country[i]] = m(lon[i], lat[i])
def similar(landstring, country):
l = difflib.get_close_matches(landstring, country, 1)
return l[0]
pos = dict((land, position[similar(land, country)]) for land in G.nodes())
nx.draw_networkx_nodes(G, pos, nodelist = [**key for key in part if part[key] == 0**],
node_size = [deg_weight[s]*10 for s in part if part[s] == 0],
node_color = 'red', node_shape='^', alpha=0.8)
nx.draw_networkx_nodes(G, pos, nodelist = [key for key in part if part[key] == 1],
node_size = [deg_weight[s]*20 for s in part if part[s] == 1],
node_color = 'black', node_shape='d')
nx.draw_networkx_nodes(G, pos, nodelist = [key for key in part if part[key] == 2],
node_size = [deg_weight[s]*10 for s in part if part[s] == 2],
node_color = 'green', node_shape='o')
nx.draw_networkx_nodes(G, pos, nodelist = [key for key in part if part[key] == 3],
node_size = [deg_weight[s]*10 for s in part if part[s] == 3],
node_color = 'blue', alpha=0.8)
nx.draw_networkx_edges(G, pos, color='grey', width = 0.75, alpha=0.2)
plt.show()
感觉就像这个答案(How to retrieve or iterate over edge keys in python networkx MultiDiGraph),这个答案(Python Tulpe Key For Dict Partial Lookup),而这个答案(How to access keys in nodes and edges in NetworkX MultiDiGraph)在正确的方向指向,但我不能让足够的链接。
任何输入将不胜感激。我很乐意让它充分发挥作用。
这是笔误,应该'part'改为'pos'?你会得到名称错误,因为在这段代码中没有任何地方分配了'part'。 –
它很可能。我之前用'pos'取代了所有'部分',但它没有奏效。自从你提起来之后,我会再试一次。 –
至少,这不应该给你一个'NameError',但它可能会因为其他一些原因失败。我简单地看了一下你提供的例子,并且我看到类似的断开连接,在这些列表解析之前没有提及“部分”。 –